oracle - 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 无法正确转换参数的任何建议?
解决方案
您发布的任何内容看起来都不是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 设置,我不知道。
推荐阅读
- laravel - Laravel API / Passport - 更改身份验证用户
- apache - 我有一个 Web 服务器 Apache 设置问题
- java - 如何使用 jdbc oracle 插入和选择全局临时表?
- angular - Angular 6 组件中的循环依赖
- reactjs - 如何将 React 与 ES6 模块一起使用
- python - Django Ajax 评论系统
- apache-spark-sql - Spark SQL 使用覆盖模式将 DF 写入 Teradata 表会丢弃表,尽管 truncate 为 True
- c# - ASPNET - 无法使用此动词类型 GET 发送内容主体
- mercurial - Mercurial 如何忽略包含已添加到源代码管理的文件的子文件夹
- python - 我一般如何将参数传递给 super().__init__()?