0

已经检查过这篇文章:SSIS 和向 Oracle 发送带有日期的查询

我正在使用以下线程 SSIS 的变量查询-使用 Attunity Oracle 数据源在 Oracle 查询中使用参数

使用的工具:VS-2019 数据流:MS Oracle 源(用于 VS-2019)我的源是雪花云。我成功地从表中获取最大日期并存储在对象类型变量中(命名为:-@var_Snowflake_Table_maxDate)。然后我使用脚本任务将值转换为字符串类型。脚本任务的代码是:

 public void Main()
        {
            OleDbDataAdapter A = new OleDbDataAdapter(); //using System.Data.OleDb; ADDED above in NAMESPACES
            System.Data.DataTable dt = new System.Data.DataTable();

            A.Fill(dt, Dts.Variables["User::var_Snowflake_Table_maxDate"].Value);

            foreach (DataRow row in dt.Rows)
            {
                object[] array = row.ItemArray;
                Dts.Variables["User::var_CreateDate"].Value = array[0].ToString();
            }
            Dts.TaskResult = (int)ScriptResults.Success;
        }

这会正确设置我的 @var_CreateDate String 类型的参数。我在本地机器上试过这个并且能够将值传递给 sql-server 的本机实例(是的,不是 oracle)。只是为了从脚本任务中测试我的参数。最后:我正在使用 VS-2019 的 MS Oracle Source 将值传递到 Oracle 云服务器。我尝试过的示例查询

"select * from Table where rownum <= 5 and NVL(CREATE_DATE,UPDATE_DATE) = " +"'05-09-2020'"

::::evals to:::: select * from related.awd_acct_activity where rownum <= 5 and NVL(CREATE_DATE,UPDATE_DATE) = '2020-05-09' 这行得通。但是价值是硬编码的。尝试2:

"select * from table  where rownum <= 50 and 
NVL(CREATE_DATE,UPDATE_DATE) = " +"'@[User::var_CreateDate]'"

尝试3:

"select * from table  where rownum <= 50 and 
NVL(CREATE_DATE,UPDATE_DATE) = to_date(" +"'@[User::var_CreateDate]'"+")"

尝试4:

"select * from table where rownum <= 50 and 
NVL(CREATE_DATE,UPDATE_DATE) = to_date(" +"'@[User::var_CreateDate]'"+",'YYYY-MM-DD')"

没有一个尝试正确地进行 2 到 4 评估。我能否就如何将此参数传递给 Oracle 云提供一些指导。谢谢。

4

1 回答 1

0

我假设您正在尝试找出将保存查询文本的变量的语法。你可以尝试这样的事情:

"select * from table where rownum <= 50 and 
NVL(CREATE_DATE,UPDATE_DATE) = to_date(" + "'" + @[User::var_CreateDate] + "'" + ",'YYYY-MM-DD')"
于 2020-05-16T14:47:14.570 回答