我有一个执行一些动态 sql 的存储过程,如下所示。我试图尽可能地减少它,所以忽略任何小错误。
在办公室它工作,每次,在11.2
,,。在客户处,它失败并显示一条消息:10.2
10.1
Unexpected Error
Error Message = "Msg:
MyProc
ORA-06550: line 1, column 1:
PLS-00103: Encountered the symbol "" when expecting one of the following:
begin case declare exit for function goto if loop mod null
如果我捕获客户正在生成的动态 sql 并将其放在如下变量中,在工作机器上运行,它就可以工作,所以并不是生成了狡猾的 sql。通常 sql 来自客户端,所以在这里我将 to_date 引号加倍。
mySQL := '
declare
pADMINDATE DATE := :1;
pEMPLOYEEIDLIKE VARCHAR2(40) := :2;
pINCLUDEEMPLOYEE number := :3;
begin
BEGIN OTHERPROC.OTHERPROC (1,TO_DATE(''2012-10-03'', ''YYYY-MM-DD''),TO_DATE(''2012-10-03'', ''YYYY-MM-DD''),0);
END;
INSERT INTO TP_EMPLOYEES (
ID,
EMPLOYEECODE
)
SELECT ROWNUM,
EMPLOYEECODE
FROM (
SELECT EMPLOYEECODE
FROM (SELECT DISTINCT EMPLOYEECODE FROM TP_EEF_TEMP) DISTINCTEMPCODES) A;
end; ';
EXECUTE IMMEDIATE
mySQL
using
pADMINDATE,
pEMPLOYEEIDLIKE,
pINCLUDEEMPLOYEE;
这不是导致问题的数据库版本,可能是权限吗?它在自身内部调用另一个存储过程,我们经常在非动态 sql 中执行,可能是这样吗?
在这里不知所措
谢谢