Oracle存储过程在Toad中执行,但不在SSIS执行SQL任务中执行,get Literal不';不匹配格式字符串
我有一个有趣的问题。如果我在Toad中执行代码,无论我通过哪个公司,它都会成功执行。如果在执行SQL任务中执行相同的脚本,则会出现一个错误,说明文本与格式字符串不匹配 脚本:Oracle存储过程在Toad中执行,但不在SSIS执行SQL任务中执行,get Literal不';不匹配格式字符串,oracle,ssis,ssis-2012,Oracle,Ssis,Ssis 2012,我有一个有趣的问题。如果我在Toad中执行代码,无论我通过哪个公司,它都会成功执行。如果在执行SQL任务中执行相同的脚本,则会出现一个错误,说明文本与格式字符串不匹配 脚本: declare company varchar(3); runid number; transcount number; returncode number; begin company:='APC'; runid:=0; transcount:=0; returncode:=0; storedprocedurenam
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.
关于SSI无法正确转换参数的原因,有什么建议吗?您发布的任何内容都不可能成为
ORA-01861
的原因。当您使用一种格式传递字符串并对其应用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>
但是,如果格式掩码与字符串匹配,则它可以工作:
检查代码的其余部分,看看是否执行了类似的操作,可能是依靠Oracle的功能将字符串隐式转换为日期(但失败)。蟾蜍可能使用了与SSIS不同的NLS设置,我说不出来。太愚蠢了,在存储过程中,它调用了一个包含日期的函数。我改变了下面的代码,现在这个工作 是: 改为:
sWeek := TO_CHAR(:NEW.week_ending_date,'WW');
sYear := TO_CHAR(:NEW.week_ending_date,'YY');
进程中没有to_日期,有两个to_字符(SYSDATE,'MM/DD/YYYY')。我会检查NLS设置。这个TO_CHAR看起来不错,没有问题。祝你好运啊,是的-正如错误堆栈所说,看看第135行和第209行的存储过程,以及第20行的触发器(我怀疑它只是调用了这个过程);触发行20刚刚声明了一个变量:nWeekEndingDayOfWeekContract编号;不过感谢您的建议。如果第135行是在异常处理程序部分中提出的,请删除(注释)它。这将迫使Oracle显示实际的错误行,这可能会给您提供线索。
sWeek := TO_CHAR(TO_DATE(:NEW.week_ending_date,'dd-mon-yy'),'WW');
sYear := TO_CHAR(TO_DATE(:NEW.week_ending_date,'dd-mon-yy'),'YY');
sWeek := TO_CHAR(:NEW.week_ending_date,'WW');
sYear := TO_CHAR(:NEW.week_ending_date,'YY');