5

我正在使用 SSIS 中的 Attunity Oracle 连接器连接到远程 Oracle 服务器。

在我的 SSIS 包中,我需要连接到 Oracle 数据库以根据日期时间参数获取数据。

我按照这里的建议编写了一个SELECT带有参数的查询:

  1. 创建了一个包变量
  2. 将变量设置为表达式 true
  3. 将查询与参数一起作为不同的包变量放入表达式中
  4. 将 at Data Flow 的表达式设置为[Oracle Source].[SqlCommand]包变量(包含查询作为表达式)

我很好,但是如果您要[Oracle Source].[SqlCommand]在数据流中设置表达式,那么我在数据流任务内的“Oracle 源”中设置什么查询?如何获取输出列并执行转换?

在设置有效的 Oracle 数据源之前,我无法执行包。

每个建议都说要[Oracle Source].[SqlCommand]在数据流中设置属性,但没有人提到如何配置 Oracle 源。我在这里错过了什么吗?


更新 (2014/02/18) -

根据@billinkc 的评论,我使用非参数查询创建了数据源,并在数据流中添加了表达式。当我执行包时,数据源中的查询更改为我的包变量表达式中的任何内容,但它会引发错误:

遇到 OCI 错误。ORA-00936: 缺少表达式

这是我WHERE的查询子句,带有变量时间戳 -

Where SL.RECEIVED_DATE = TO_DATE( @[User::Last_Run_Timestamp] , 'dd/mon/yyyy HH24:MI:SS')

4

2 回答 2

7

要使用 Attunity Oracle 数据源进行参数化,您需要先设置元数据。这通常仅通过使用未参数化查询作为源来完成。然后,在控制流中,在数据流的表达式中,您将在 SSIS 变量中作为源。

重要的是,将 SSIS 变量设置为 Evaluate as Expression 设置为 true,然后必须正确创建公式。与 PowerShell 不同,令牌不会在字符串中替换。相反,您需要使用经典的字符串连接技术。下面演示了将变量@[User::Last_Run_Timestamp]转换为字符串,该字符串允许我通过+与过滤器的其余部分连接。

"SELECT * FROM Table SL Where SL.RECEIVED_DATE = TO_DATE( " 
+ (DT_WSTR, 24)@[User::Last_Run_Timestamp] 
+ " , 'dd/mon/yyyy HH24:MI:SS')"
于 2014-02-19T02:52:25.817 回答
4

我只需要处理这个。这不是很直观,但请遵循...

  • 在控制流设计器上,右键单击数据流本身并打开属性。

  • 找到“表达式”并单击椭圆以打开表达式编辑器。

  • 在属性下,选择[Oracle Source].[SqlCommand],然后您可以构建一个表达式。

更多细节:http ://sornanara.blogspot.com/2013/11/ssis-use-dynamic-sql-in-oracle-source.html

于 2014-07-30T04:53:10.857 回答