2017-04-26 3 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를 사용하려는 경우에도 위와 같이 수행 할 수 있습니다. DB2에서 커서가 열릴 때까지 DECLARE CURSOR 문에 사용 된 모든 변수의 값은 평가되지 않습니다.

+0

그것은 일했다.. 톤 찰스. 감사합니다. 나의 날을 구했다. 나는 SP에 처음이고 완전히 그것에 갇혀있었습니다 ... 고마워요 !!!!! –