2017-04-26 11 views
1

コンパイルできないストアドプロシージャがあります。'Set'でコンパイルしないストアドプロシージャ

CREATE PROCEDURE FINGOODSCH(IN STRDATE DATE,   
           IN prodln Char(5))             
     LANGUAGE SQL           
     RESULT SETS 1          
     SET OPTION DBGVIEW =*SOURCE                   
    BEGIN             
    Declare IN_DATE NUMERIC(7,0); 
SET IN_DATE = 0;               
/*  SET IN_DATE = (DECIMAL(CHAR(SUBSTR(CHAR(STRDATE),1,4);  */  
/*     SUBSTR(CHAR(STRDATE),6,2) CONCAT    */  
/*     SUBSTR(CHAR(STRDATE),9,2))) - 19000000) ;  */  

Declare FinGoodSCH Cursor for            
    Select TRIM(ORDNO) as OrderNumber,          
      ('20' || SUBSTR(CHAR(ODUDT),2,2) || '-' ||      
      SUBSTR(CHAR(ODUDT),4,2) || '-' ||        
      SUBSTR(CHAR(ODUDT),6,2)) as OrderDueDate,     
      TRIM(FITEM) as ModelNumber,         
      TRIM(DPTNO) as ProductionLine        
    From ORMAST               
    Where                
    DPTNO = prodln              

     OPEN FinGoodSCH ;  

END             

問題は「SET IN_DATE = 0; (私はそれを0に設定するためにDefaultを使用することができますが、私が探しているものではありません) '。この文を削除すると、コンパイルされます。コンパイル・エラー: SQL0104 30 3位置33トークンFINGOODSCHが無効です。有効
トークン:GLOBAL

また、私は小数でそれを宣言しようとしたが、それはあなたが任意の実行可能コードの前にSQLで宣言をしなければならない

答えて

2

....

CREATE PROCEDURE FINGOODSCH(IN STRDATE DATE,   
           IN prodln Char(5))             
     LANGUAGE SQL           
     RESULT SETS 1          
     SET OPTION DBGVIEW =*SOURCE                   
BEGIN             
    Declare IN_DATE NUMERIC(7,0); 

    Declare FinGoodSCH Cursor for            
     Select TRIM(ORDNO) as OrderNumber,          
      ('20' || SUBSTR(CHAR(ODUDT),2,2) || '-' ||      
      SUBSTR(CHAR(ODUDT),4,2) || '-' ||        
      SUBSTR(CHAR(ODUDT),6,2)) as OrderDueDate,     
      TRIM(FITEM) as ModelNumber,         
      TRIM(DPTNO) as ProductionLine        
     From ORMAST               
     Where                
     DPTNO = prodln;              

    -- Executable code starts here.... 
    SET IN_DATE = (DECIMAL(CHAR(SUBSTR(CHAR(STRDATE),1,4);  
        SUBSTR(CHAR(STRDATE),6,2) CONCAT     
        SUBSTR(CHAR(STRDATE),9,2))) - 19000000) ;   

    OPEN FinGoodSCH ;  

END 

(注)に起こった場合には動作しませんでしたカーソル内でIN_DATEを使用したい場合は、上記のようにします。 DECLARE CURSORステートメントで使用される変数の値は、カーソルがDB2で開かれるまで評価されません。

+0

これは働いています。トンチャールズに感謝しました。私はSPに新しいですし、完全にそれにこだわっていた...ありがとう!!!!! –

関連する問題