2017-04-26 75 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,但那不是我正在寻找的)'。如果我删除这条语句,它会编译。编译错误是: SQL0104 30 3位置33令牌FINGOODSCH无效。有效的
令牌:GLOBAL。

而且,我试着用十进制声明,但没有奏效

回答

2

你之前的任何可执行代码做在SQL声明....

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,你仍然可以像上面那样做。在DB2中打开游标之前,不会评估DECLARE CURSOR语句中使用的任何变量的值。

+0

它的工作..谢谢吨查尔斯..保存我的一天。我是SP的新手,并且完全陷入其中......谢谢!!!!! –