大师,我有一个存储过程必须在动态表上执行。以下是存储过程的外观。
create or replace PROCEDURE EFX_RECON_UPDATE_SPROC(
FILENAME IN VARCHAR2 ,
SOURCE IN VARCHAR2 )
AS
TABLE_NAME VARCHAR2(200);
query_str VARCHAR2(500);
cnt NUMBER(10);
BEGIN
-- Create dynamic table for each fullfilment system.
TABLE_NAME := SOURCE||'_BRM_OMC_RECON_T';
query_str :='SELECT count(*) from ' || SOURCE || '_BRM_OMC_RECON_T where PROCESSINGFILENAME='''||FILENAME||''';';
EXECUTE IMMEDIATE query_str;
query_str:='MERGE INTO '||TABLE_NAME||' T
USING (
SELECT
ERRORCODE, PROCESSINGFILENAME,
RECORDNUMBER from ERROR_UPLOAD_T
) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='''||FILENAME||''')
WHEN MATCHED THEN
UPDATE SET
T.STATUS = ''ERROR'',
T.ERRORSOURCE = ''BRM'',
T.ERRORCODE = TMP.ERRORCODE';
EXECUTE IMMEDIATE query_str;
COMMIT;
END EFX_RECON_UPDATE_SPROC;
执行存储过程时出现此错误。问题出在FILENAME
上,我已将其附在' QUOT。
ORA-00933:SQL命令未正确结束
ORA-06512:at" PIN149.EFX_RECON_UPDATE_SPROC",第12行
答案 0 :(得分:1)
根据错误消息,问题出现在这一行:
EXECUTE IMMEDIATE query_str;
应该是:
EXECUTE IMMEDIATE query_str INTO cnt;
分号应从SELECT
字符串中删除。
虽然变量cnt
没有在其他地方使用,所以我不确定该声明应该完成什么。