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

时间:2015-05-28 22:15:48

标签: sql oracle

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

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:缺少逗号

1 个答案:

答案 0 :(得分:1)

这有点难以辨别,但我认为可能是这两个术语:

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

在一个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异常捕获,这可能隐藏了实际异常发生位置的详细信息。许多人认为这种模式是个错误。