首页 > 解决方案 > Oracle 存储过程在 Toad 中执行,但不在 SSIS 中执行 SQL 任务,获取 Literal 与格式字符串不匹配

问题描述

我有一个有趣的问题。如果我在 Toad 中执行代码,无论我通过什么公司,它都会成功执行。如果我在执行 SQL 任务中执行相同的脚本,我会收到一条错误消息,指出文字与格式字符串不匹配。

脚本:

declare
company varchar(3);
runid number;
transcount number;
returncode number;

begin
company:='APC';
runid:=0;
transcount:=0;
returncode:=0;

storedprocedurename(company, runid, transcount, returncode);

end;

Oracle中存储过程的开始:

CREATE OR REPLACE PROCEDURE storedprocedurename
   (company_code IN INTERFACE_LOG.company_code%TYPE,
    run_id IN OUT NUMBER,
    transaction_count IN OUT NUMBER,
    return_code IN OUT NUMBER )

SSIS 中的错误:

[Execute SQL Task] Error: Executing the query "declare
company varchar(3);
runid number;
transcou..." failed with the following error: "ORA-01861: literal does not match format string
ORA-06512: at "triggername", line 20
ORA-04088: error during execution of trigger 'triggername'
ORA-06512: at "storedprocedurename", line 209
ORA-01861: literal does not match format string
ORA-06512: at "triggername", line 20
ORA-04088: error during execution of trigger 'triggername'
ORA-06512: at "storedprocedurename", line 135
ORA-06512: at line 1". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

关于为什么 SSIS 无法正确转换参数的任何建议?

标签: oraclessisssis-2012

解决方案


您发布的任何内容看起来都不是ORA-01861. date当您使用一种格式传递字符串并将函数应用于它时,它通常与数据类型相关,to_date该函数使用完全不相关的格式掩码。例如:

SQL> select to_date('23062020', 'yyyy-mm-dd') from dual;
select to_date('23062020', 'yyyy-mm-dd') from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string


SQL>

但是,如果格式掩码与字符串匹配,它可以工作

SQL> select to_date('23062020', 'ddmmyyyy') from dual;

TO_DATE(
--------
23.06.20

SQL>

检查你的其余代码,看看你是否做了这样的事情,可能依赖于 Oracle 将字符串隐式转换为日期的功能(但失败了)。TOAD 可能使用了与 SSIS 不同的 NLS 设置,我不知道。


推荐阅读