SSIS-使用Attunity Oracle数据源在Oracle查询中使用参数

SSIS-使用Attunity Oracle数据源在Oracle查询中使用参数,oracle,ssis,attunity,Oracle,Ssis,Attunity,我正在使用SSIS中的Attunity Oracle连接器连接到远程Oracle服务器 在我的SSIS包中,我需要连接到Oracle数据库,以便根据datetime参数获取数据 我按照建议编写了一个带有参数的SELECT查询: 创建了一个包变量 将要计算的变量设置为表达式true 将查询与参数作为不同的包变量放在表达式中 将数据流处的[Oracle Source].[SqlCommand]的表达式设置为package变量(将查询作为表达式包含) 我在这方面做得很好,但是如果您在数据流中为[Ora

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

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

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

  • 创建了一个包变量
  • 将要计算的变量设置为表达式true
  • 将查询与参数作为不同的包变量放在表达式中
  • 将数据流处的
    [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非常重要”-是的,这让我大吃一惊!