在数据流任务中将值从表传递到Oracle查询?

时间:2014-05-16 18:15:49

标签: sql-server sql-server-2008-r2 oracle-sqldeveloper ssis

Employee:

EmployeeID     EmployeeName      EmployeeNumber     StartDate        StopDate
   1            Tom                 7887             3/1/2014         3/1/2015
   2            Harry               7888             3/1/2013         3/1/2015
   3            Frank               7889             3/1/2012         3/1/2015
   4            John                7890             3/1/2011         3/1/2015

我在Sql Server中有一个Employee表。我使用员工信息将值传递给Oracle查询,以使用数据流任务从Oracle获取数据。  但我从未尝试使用pl / sql,因为它看起来与sql不同。  我的oracle查询看起来像

SELECT *
    FROM Components A INNER JOIN Values b
    on A.Rowid=B.Rowid
    and A.Contact IN(:EmployeeName)
    and A.Sub IN(:EmployeeNumber )
    WHERE
A.time BETWEEN TO_DATE(:StartDate) AND TO_DATE(:EndDate) + 0.99999


How can I pass my Employee table values in to above sql query using for loop Container.

2 个答案:

答案 0 :(得分:1)

您可以像执行SQL Server一样查询Oracle。在您的情况下,您必须从查找变量构建Oracle查询。例如,您的变量ExtractSQL将是一个如下表达式 -

“SELECT *     FROM Components A INNER JOIN值b     在A.Rowid = B.Rowid     和A.Contact ='“+ @ [User :: EmployeeName] +”'和A.Sub ='“+ @ [User :: EmployeeNumber] +”'WHERE A.时间截止到_DATE('“+ @ [User :: StartDate] +”')和TO_DATE('“@ @@ [User :: EndDate] +”')+ 0.99999“

根据您在结尾存储日期的方式,您可能必须将第二个参数传递给To_Date函数,格式为Eg。 TO_DATE('2014-05-14 15:01:27','YYYY-MM-DD HH24:MI:SS')

- 回答有关设置变量的问题。

  1. 创建一个名为EmployeeRecordset的变量,类型为“Object”。

  2. 在结果集选项卡的执行SQL任务中,将结果名称0和变量名称设置为User :: EmployeeRecordset。

  3. 在for each循环中,将Enumerator设置为ForEach ADO枚举器,将ADO对象源变量设置为User :: EmployeeRecordset。枚举模式,您可以将其保留为第一个表中的行。

  4. 在变量映射中设置行级变量 - 即员工编号,员工姓名等,从查询返回的顺序开始,索引为0.

  5. 现在,您应该能够使用循环内的变量来形成Oracle查询。

答案 1 :(得分:0)

它应该是这样的:

  1. 构建行集的数据流任务(DFT1) - 我们将在Oracle中循环。
  2. 用户定义的变量:@ EmployloyID,@ EmployeeName,@ EmployeeNumber,@ StartDate,@ StopDate
  3. DFT1 - 用于将数据加载到记录集目标的SQL查询。您可以将查询编写为格式化数据的格式,也就是说,例如将@StartDate定义为字符串并转换为' 3/1 2014'到Oracle中所需的日期格式
  4. 现在将foreachLoop枚举器用于Ado .NET记录集并循环遍历。
  5. 在foreachLoop枚举器中,您应该拥有使用上述变量的数据流任务,以使用表达式形成SQL语句(Meant将在Oracle中执行)。您将需要在表达式选项
  6. 中使用SQL命令
  7. 目的地!