[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    850

    SQL Stored Procedure

    Hallo zusammen,

    ich suche gerade eine Möglichkeit einen Fehler
    ( eine Bedingung ) im SQL abzufangen.

    PHP-Code:
    Create procedure MK/prc_atest    (
    INOUT IO_CODE CHAR(5) ,           
    INOUT IO_MSG  CHAR(132) ,         
    IN ADBACTION  CHAR()            
                            )         
    LANGUAGE SQL                      
    SPECIFIC MK
    /prc_atest             
    ..
    ..

    Begin                            
                                     
    DECLARE ASQLMSG  CHAR(32740)   ; 
    DECLARE 
    SQLCODE  INTEGER       
    DECLARE 
    SQLSTATE CHAR(5)       ; 

    if ( 
    aDbaction =  'GO')   THEN                      
                                                        
                                                        
    -- CALL QCMDEXC('dltf  mk/stpsum'000000015.00000);
           --
    drop table mk/stpsum  ;                         
           --if ( 
    SQLSTATE '42704'then                   
           
    --  set io_code =  'y999' ;                       
           --
    End if;                                         
       
    create table mk/stpsum                    
        
    as(  select grp as GRPSUM,               
             
    decsum(QTY) , 10 0) as SumQty 
             
    decsum(AMT) , 10 2) as SumAMt   
        FROM mk
    /stp GROUP BY grp)                
        
    with  data   ;                           
                                                 
      
    set IO_Code='001'   ;                      
     return 
    0  ;                                                  
    End if;                                                       
                                                                  
                                                                  
      
    set io_code =  'xxxx' ;                                     
      
    set io_Msg  'aDbAction code ' concat adbaction concat '=';
                                                                  
    END  ;                                                        
                                                                  
    COMMENT ON SPECIFIC PROCEDURE MK/prc_atest                    
    IS 
    'SQL Procedure MK/prc_atest  ' 
    Mit dieser SQL Prozedur soll die Tabelle mk/stpsum ( später weitere Tabellen )
    erstellt werden.

    Ich muss die Tabellen vorher Löschen
    Also eine Drop Table verwenden.
    Der Drop Table läuft auf eine Exception wenn die Tabelle schon da ist.

    Damit das Programm weiterläuft muss diese
    Bedingung abgefangen werden.
    Weiß jemand wie das geht ?

    Gruß
    Michael

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Code:
    Create procedure MK/prc_atest    (
    INOUT IO_CODE CHAR(5) ,           
    INOUT IO_MSG  CHAR(132) ,         
    IN ADBACTION  CHAR(3 )            
                            )         
    LANGUAGE SQL                      
    SPECIFIC MK/prc_atest             
    ..
    ..
    
    Begin 
    DECLARE CONTINUE HANDLER FOR 2
    SQLSTATE '23505';
    (Wobei 23505 für den zu ersetzenden Code steht)
    oder
    Code:
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 1
    SET vsqlcode = SQLCODE;
    lg Andreas

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ein Continue Handler ist der richtige Weg.
    Es gibt allerdings auch die Quick und Dirty-Lösung, nämlich, dass man prüft ob die Tabelle in der Catalog View SYSTABLES vorhanden ist.
    Ist sie vorhanden, dann Löschen ansonsten nicht.

    Code:
    Declare isFound Integer;
    ....
    
    Set isFound = 0;
    
    Select 1 into isFound
    From SysTables
    Where     System_Table_Name   = 'STPSUM'
          and System_Table_Schema = 'MK';
    
    If isFound = 1 Then Drop Table MK/STPSUM;
    End If;
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Jan 2001
    Beiträge
    850

    Thumbs up

    Hallo zusammen

    so klappt es:

    PHP-Code:
    ...
    ...                                                
    DECLARE CONTINUE 
    HANDLER FOR SQLEXCEPTION       
      Begin                                         
       set IO_Code
    =SQLCODE ;                        
      
    End;
    ...
    ..
     
    drop table mk/stpsum  ;                      
        
    set IO_Code='001'   ;                     
        
    set io_Msg  'table delete ' ;           
                                                  
     
    create table mk/stpsum                       
        
    as(  select grp as GRPSUM,                
              
    decsum(QTY) , 10 0) as SumQty 
              
    decsum(AMT) , 10 2) as SumAMt   
         FROM mk
    /stp GROUP BY grp)                
         
    with  data   ;                           
                                                  
        
    set IO_Code='002'   ;                     
        
    set io_Msg  'table erstellt ' 
    Dieses Forum und die fachliche Kompetenz ist einfach Spitze

    Vielen Dank

Similar Threads

  1. SQL Stored Procedure / Bibliotheksliste
    By olbe in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 19-08-08, 13:35
  2. SQL-Fehler -514 beim Aufruf eines variablen SQL über Stored Procedure
    By HDPSTANEKE in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 21-06-07, 14:33
  3. Berechtigung für Stored Procedure
    By rebe in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 12-10-06, 11:22
  4. SQL Stored Procedure verschwindet
    By florian in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 17-05-06, 16:08
  5. Stored Procedure SQL Cursor Update
    By Jenne in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 14-06-05, 14:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •