2016-06-29 8 views
0

Gurus、私は動的テーブルで実行する必要があるプロシージャを格納しています。ストアドプロシージャの外観は次のとおりです。Oracleの動的ストアドプロシージャ

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であり、私はそれを '引用符で囲みました。

ORA-00933:SQLコマンドがない正しく
ORA-06512を終えた: "PIN149.EFX_RECON_UPDATE_SPROC" で、ライン12

+0

SQLステートメントを実行する前に印刷します。構文エラーが何であるかはすぐわかりませんが、一度作成したSQL文を出力してしまう可能性があります。 –

答えて

1

問題は、このライン上にあるエラーメッセージによると:

EXECUTE IMMEDIATE query_str; 

それは次のようになります。

EXECUTE IMMEDIATE query_str INTO cnt; 

そしてセミコロンはSELECT文字列から削除する必要があります。

変数cntは他の場所では使用されていませんが、そのステートメントが何を達成するはずかわかりません。

関連する問題