You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft Connector for Oracle v1.2的SSIS包遇ORA-01861错误求助

解决SSIS使用Microsoft Connector for Oracle v1.2时的ORA-01861错误

错误原因

问题出在TO_DATE(sysdate, get_date_format)这行代码:sysdate本身是DATE类型,Oracle会先把它隐式转成字符串(基于当前会话的NLS_DATE_FORMAT),再用get_date_format指定的格式转DATE。当Microsoft Connector for Oracle v1.2默认的会话NLS_DATE_FORMAT和get_date_format返回的格式不匹配时,就会触发ORA-01861错误。旧版Oracle ODBC驱动的默认NLS_DATE_FORMAT刚好和目标格式一致,所以没有问题。

SSIS端规避方案

1. 调整连接管理器的NLS_DATE_FORMAT参数

在SSIS的Oracle连接管理器中:

  • 右键连接管理器 → 选择Properties
  • 在All Properties列表里找到NLS_DATE_FORMAT,设置为get_date_format函数返回的格式(比如如果函数返回'YYYY-MM-DD HH24:MI:SS',就填这个值)
  • 保存后重新测试数据流预览

2. 切换回Oracle ODBC驱动

既然旧版ODBC驱动可以正常工作,直接替换数据源类型:

  • 在Windows ODBC数据源管理器中,用Oracle ODBC Driver创建新的系统/用户DSN
  • 在SSIS包中删除原Microsoft Connector连接,新建ODBC连接管理器指向刚才创建的DSN
  • 数据流中替换为ODBC源组件,调用目标视图即可

3. 预设置会话日期格式

通过SSIS的执行SQL任务先调整会话格式,再执行数据流:

  • 在数据流任务前添加执行SQL任务,连接到Oracle
  • 执行SQL语句:ALTER SESSION SET NLS_DATE_FORMAT = (SELECT get_date_format FROM DUAL);
  • 确保执行SQL任务成功后再触发数据流任务

Oracle端包装方案(无需修改原视图)

创建一个包装视图,修正日期处理逻辑,避免隐式转换问题:

CREATE OR REPLACE VIEW WRAP_YOUR_VIEW AS
SELECT
    -- 替换有问题的日期字段,显式转换字符串再转日期
    TO_DATE(TO_CHAR(sysdate, get_date_format), get_date_format) AS PROBLEM_DATE_COL,
    -- 保留其他所有字段
    COL1, COL2, COL3, ...
FROM YOUR_ORIGINAL_VIEW;

之后SSIS直接调用这个包装视图即可。原理是先显式用get_date_format把sysdate转成对应格式的字符串,再用同样格式转DATE,彻底规避会话格式不匹配的问题。

内容的提问来源于stack exchange,提问作者sethchev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:43:29