首页 文章

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

提问于
浏览
4

我在SSIS中使用Attunity Oracle连接器连接到远程Oracle Server .

在我的SSIS包中,我需要连接到Oracle数据库以根据datetime参数获取数据 .

我按照建议here用参数写了一个 SELECT 查询:

  • 创建了一个包变量

  • 将变量设置为计算为表达式true

  • 将查询与表达式一起放在表达式中作为不同的包变量

  • 在数据流中将 [Oracle Source].[SqlCommand] 的表达式设置为包变量(包含查询作为表达式)

我很高兴在这里,但是如果你在数据流中为 [Oracle Source].[SqlCommand] 设置一个表达式,那么我在数据流任务中的"Oracle Source"中设置了什么 Query ?如何获取输出列并执行转换?

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

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


Update (2014/02/18) -

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

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

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

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

2 回答

  • 3

    要使用Attunity Oracle数据源进行参数化,您需要先获取元数据集 . 这通常只需使用非参数化查询作为源来完成 . 然后,在控制流中,在数据流的表达式上,您将在SSIS变量中作为源 .

    使用Evaluate as Expression设置为true来设置SSIS变量非常重要,然后必须正确创建公式 . 与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')"
    
  • 6

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

    • 在Control Flow设计器上,右键单击Data Flow本身并打开Properties .

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

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

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

相关问题