Pra*_*ngh 5 oracle ssis attunity
我在SSIS中使用Attunity Oracle连接器连接到远程Oracle Server.
在我的SSIS包中,我需要连接到Oracle数据库以根据datetime参数获取数据.
我按照这里的建议写了一个SELECT
带参数的查询:
[Oracle Source].[SqlCommand]
数据流的表达式设置为包变量(包含查询作为表达式)我很擅长这里,但是如果你[Oracle Source].[SqlCommand]
在数据流中设置表达式,那么我在数据流任务中的"Oracle Source"中设置了什么Query?如何获取输出列并执行转换?
在设置有效的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')
要使用Attunity Oracle数据源进行参数化,您需要先获取元数据集.这通常只需使用非参数化查询作为源来完成.然后,在控制流中,在数据流的表达式上,您将在SSIS变量中作为源.
使用Evaluate as Expression设置为true来设置SSIS变量非常重要,然后必须正确创建公式.与PowerShell不同,令牌不会在字符串中替换.相反,您需要使用经典的字符串连接技术.下面演示如何将Variable转换@[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')"
Run Code Online (Sandbox Code Playgroud)