SSIS - 使用Attunity Oracle Datasource在Oracle Query中使用参数

时间:2014-02-14 08:44:22

标签: oracle ssis attunity

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

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

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

  1. 创建了一个包变量
  2. 设置变量以评估为表达式true
  3. 将查询与表达式作为不同的包变量放在表达式中
  4. 在数据流中将[Oracle Source].[SqlCommand]的表达式设置为包变量(包含查询作为表达式)
  5. 我很擅长这里,但是如果你在数据流中设置[Oracle Source].[SqlCommand]的表达式,那么我在数据里面的“Oracle Source”中设置了什么查询流程任务?如何获取输出列并执行转换?

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

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


    更新(2014/02/18) -

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

      

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

    这是查询的WHERE子句,带有变量timestamp -

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

2 个答案:

答案 0 :(得分: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')"

答案 1 :(得分:3)

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

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

  • 查找'表达式'并单击椭圆以打开表达式编辑器。

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

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