【问题标题】:ORA-20001: An error was encountered - -917 -ERROR- ORA-00917: missing commaORA-20001: 遇到错误 - -917 -ERROR- ORA-00917: 缺少逗号
【发布时间】:2015-05-29 06:53:12
【问题描述】:

我收到错误 ORA-00917:在下面运行具有插入语句的过程时缺少逗号,感谢帮助。

DECLARE err VARCHAR2(10000);
BEGIN
 Sample_Proc ('INSERT',60682,'Tab_AUDIT',' ','insert into Tab_1 (Audit_Sk,Process_Sk,Process_Name,Process_Type,Audit_Categ_Cd,Src_Query_Txt ,Dest_Query_Txt ,Alert_Log_Message,INSERT_DATE,UPDATE_DATE, SUCCESS_EMAIL_FLAG, SUCESS_MAIL_TXT,ERROR_MAIL_TXT,WARN_MAIL_TXT,AUDIT_TYPE) values (60682,100160306,''prcs_name'',''AUDIT'',''AGGREGATE COMPARE''
,''SELECT COUNT(1) FROM Tabb1 WHERE to_date(Create_Ts)= :b1 and etl_action_cd<>''D'';''
,''SELECT COUNT(1) FROM Tabb2 WHERE to_date(Create_Ts)= :b1 ;''
,''Comparison of data  - alert''
, 27-MAY-15 02:12:09
, 27-MAY-15 02:12:09
,''Y''
,''Validation ran successfully'' 
,''Validation  failed'' 
,''Validation  failed'' 
,''DND''))',' ',123,err);
DBMS_OUTPUT.PUT_LINE(ERR);
end;

错误报告:

ORA-20001:遇到错误 - -917 -ERROR- ORA-00917:缺少逗号

【问题讨论】:

  • 听起来好像少了一个逗号...为什么要将 sql 字符串传递到 proc 中以插入数据?但是对于您的问题,sql 字符串是否可以独立工作?

标签: sql oracle


【解决方案1】:

有点难说,但我觉得大概就是这两个名词:

, 27-MAY-15 02:12:09
, 27-MAY-15 02:12:09

which 在 values 子句中将被视为两个单独的表达式,它们之间没有逗号 - 因此是错误消息。

您大概是指日期,而不是两个表达式,而不是仅仅通过添加转义引号来传递字符串,您应该使用格式模型显式转换:

, to_date(''27-MAY-15 02:12:09'', ''DD-MON-RR HH24:MI:SS'')
, to_date(''27-MAY-15 02:12:09'', ''DD-MON-RR HH24:MI:SS'')

这仍然依赖于会话 NLS 日期语言是英语,但这是另一个问题...

顺便说一句,您可能想查看the alternative quote syntax,这意味着您不需要转义参数中的所有单引号。我不会尝试转换您的代码,但有一个日期转换的简短示例here

另外,ORA-20001 建议您的过程有一个WHEN OTHERS 异常捕获,这可能会隐藏实际异常发生位置的详细信息。许多人认为这种模式是一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    相关资源
    最近更新 更多