SSIS-使用Attunity Oracle数据源在Oracle查询中使用参数
我正在使用SSIS中的Attunity Oracle连接器连接到远程Oracle服务器 在我的SSIS包中,我需要连接到Oracle数据库,以便根据datetime参数获取数据 我按照建议编写了一个带有参数的SSIS-使用Attunity Oracle数据源在Oracle查询中使用参数,oracle,ssis,attunity,Oracle,Ssis,Attunity,我正在使用SSIS中的Attunity Oracle连接器连接到远程Oracle服务器 在我的SSIS包中,我需要连接到Oracle数据库,以便根据datetime参数获取数据 我按照建议编写了一个带有参数的SELECT查询: 创建了一个包变量 将要计算的变量设置为表达式true 将查询与参数作为不同的包变量放在表达式中 将数据流处的[Oracle Source].[SqlCommand]的表达式设置为package变量(将查询作为表达式包含) 我在这方面做得很好,但是如果您在数据流中为[Ora
SELECT
查询:
[Oracle Source].[SqlCommand]
的表达式设置为package变量(将查询作为表达式包含)[Oracle Source].[SqlCommand]
设置表达式,那么我在数据流任务中的“Oracle Source”中设置了什么Query?如何获取输出列并执行转换
在设置有效的Oracle数据源之前,我无法执行该包
每个建议都要求在数据流中设置[Oracle Source].[SqlCommand]
属性,但没有人提到如何配置Oracle源代码。
我是不是遗漏了什么
更新(2014/02/18) 基于@billinkc的注释,我创建了带有非参数查询的数据源,并在数据流中添加了表达式。当我执行包时,数据源中的查询更改为包变量表达式中的任何内容,但它抛出一个错误: 遇到OCI错误。ORA-00936:缺少表达式 这是查询的my
WHERE
子句,带有可变的时间戳-
其中SL.RECEIVED_DATE=TO_DATE(@[User::Last_Run_Timestamp],'dd/mon/yyyyy HH24:MI:SS')
要使用Attunity Oracle数据源进行参数化,您需要首先获取元数据集。这通常是通过使用未经参数化的查询作为源来完成的。然后,在控制流中,在数据流的表达式上,您将SSIS变量作为源子变量
SSIS变量的Evaluate as Expression设置为true非常重要,然后必须正确创建公式。与PowerShell不同,令牌不会在字符串中替换。相反,您需要使用经典的字符串连接技术。下面演示如何将变量@[User::Last\u Run\u Timestamp]
强制转换为一个字符串,该字符串允许我通过+
与过滤器的其余部分连接起来
"SELECT * FROM Table SL Where SL.RECEIVED_DATE = TO_DATE( "
+ (DT_WSTR, 24)@[User::Last_Run_Timestamp]
+ " , 'dd/mon/yyyy HH24:MI:SS')"
我不得不处理这件事。这不是很直观,但请继续
- 在控制流设计器上,右键单击数据流本身并打开属性
- 找到“表达式”并单击椭圆以打开表达式编辑器
- 在属性下,选择[Oracle Source].[SqlCommand],然后可以构建表达式
更多详细信息:要不要留下评论,唐先生?我没有Oracle实例,但如果我了解问题所在,attunity驱动程序不允许“正常”参数化。因此,方法是将此源的数据流级别的属性设置为SSIS变量。然后,您的问题就变成了,您在数据流中使用了什么查询?谢谢billinkc!!这正是我的意思。。。我已更新问题。使用非参数查询创建数据流。这允许设计器设置元数据。完成后,将表达式添加到数据流。请查看我的更新,现在我可以获取元数据,但由于错误而无法运行包。“将SSIS变量的Evaluate as expression设置为true非常重要”-是的,这让我大吃一惊!