SSIS 向 Oracle 云 VS-2019 和 MS Oracle 源发送带有数据参数的查询

Posted

技术标签:

【中文标题】SSIS 向 Oracle 云 VS-2019 和 MS Oracle 源发送带有数据参数的查询【英文标题】:SSIS sending query with data parameter to Oracle cloud VS-2019 and MS Oracle Source 【发布时间】:2020-05-14 21:32:40 【问题描述】:

已查看此帖子:SSIS and sending query with date to Oracle

我在下面的线程中使用变量查询 SSIS - Using parameters in Oracle Query using Attunity Oracle Datasource

使用的工具:VS-2019 数据流:MS Oracle Source(适用于 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 字符串类型的参数。我在本地机器上尝试了这个,并且能够将值传递给 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

"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 云提供一些指导。 谢谢。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

信不信由你,另一位同事分享了有效的方法。在脚本任务中,我必须添加额外的“'”(单引号)来封装日期。然后在 SSIS 中,我必须创建第三个变量来键入字符串并分配变量 2 的值(来自脚本任务的单引号)。将此第三个变量分配给查询。并且有效。

以上是关于SSIS 向 Oracle 云 VS-2019 和 MS Oracle 源发送带有数据参数的查询的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 初次接触 + 开发记录

SSIS连接Oracle问题汇总

打开 Biml 解决方案崩溃 VS2019

MS SSIS 下的 Oracle 事务

SSIS 脚本任务使用通配符删除文件

SSIS获取Oracle数据库数据