在SSIS中,从ORACLE中查询数据,以日期字段查询条件,取某个时间段内的数据。形如:
select * from i_out_serv_scn where state_date >=? and state_date <? 
?:表示参数。第一步:
  定义包变量:maxdate 类型为DateTime
第二步:
  取"执行SQL任务"组件,设置SQLStatement为:
  select max(scn_time) md from i_out_data_scn_info where table_name = 'I_OUT_SERV_SCN'
第三步:
  在执行SQL任务组件中设置结果集,结果名称为:md,值为:用户::maxdate
-----------------以上为给变量赋值----------------------
第四步:
  取一“数据流任务”组件,双击进入"数据流"页面
第五步:
  取一“OLEDB源”组件,设置连接为连接到ORACLE数据库,连接驱动为:microsoft old db provider for oracle(连接没有问题)
第六步:
 设置访问模式为:SQL命令
 select * from i_out_serv_mon where state_date >=? and state_date<?
第七步:
点“参数”按钮,提示:
------------------------------无法从 SQL 命令中提取参数。提供程序可能无法帮助分析命令中的参数信息。在这种情况下,请使用“变量中的 SQL 命令”访问模式。在该模式中,整个 SQL 命令存储在变量中。------------------------------
其他信息:提供程序不能导出参数信息,没有调用 SetParameterInfo 。 (Microsoft OLE DB Provider for Oracle)
大家帮忙看如何解决?

解决方案 »

  1.   

    1.如果是存储过程,那么使用out设置参数,才可以传递到过程外部,
    2.如果单独执行sql,能够得到结果,但是在程序中,或者页面(界面)上无法显示数据,
      那么这就不是sql问题,这就是你处理数据时出现的问题
      

  2.   

    第一步:
      定义包变量:maxdate 类型为String
      定义包变量:sqlStatement类型为String,值为:select * from i_out_serv_mon 
    第二步:
      取"执行SQL任务"组件,设置SQLStatement为:
      select to_char(max(scn_time),'YYYY/MM/DD HH:MI:SS') md from i_out_data_scn_info where table_name = 'I_OUT_SERV_SCN'
    第三步:
      在执行SQL任务组件中设置结果集,结果名称为:md,值为:用户::maxdate
    -----------------以上为给变量赋值----------------------
    第四步:
      取一 "脚本任务"组件,
          脚本语言选择:Microsoft Visual Basic 2008,
          只读变量:用户::maxdate
          读写变量:用户::sqlStatement
          点击编辑脚本:输入:
                Dts.Variables("用户::sqlStatement").Value = Dts.Variables("用户::sqlStatement").Value + _
                " where start_time >= to_date('" + Dts.Variables("用户::maxdate").Value.ToString + "','YYYY/MM/DD HH:MI:SS')"  取一“数据流任务”组件,双击进入"数据流"页面
    第五步:
      取一“OLEDB源”组件,设置连接为连接到ORACLE数据库,连接驱动为:microsoft old db provider for oracle(连接没有问题)
    第六步:
     设置访问模式为:SQL命令 SQL Command from variable
     变量名称选择:用户::sqlStatement
    曲线救国,搞定!