Hallo *all,
ich habe hier eine SQL UDF die nicht das macht was ich erwarte.
Also wollte ich mal den Bagger anwerfen um das zu prüfen. Habe ich allerdings noch nie gemacht, deswegen klappt es auch noch nicht.

Schritt eins:

Code:
CREATE FUNCTION rptrade/zaehler /*01.11.19 12:05*/
( DEBITOR dec(08) ) RETURNS dec(05)               
           Language SQL                           
           Modifies SQL Data                      
           Deterministic                          
           Specific zaehler                       
           Called on NULL Input                   
                                                  
           Set Option                             
               DATFMT  = *ISO,                    
               DBGVIEW = *SOURCE,                 
               DECMPT  = *COMMA,                  
               TIMFMT  = *ISO                     
BEGIN                                             
DECLARE RETURNVAL dec    (05) DEFAULT 0;          
DECLARE anzahl    decimal(05) DEFAULT 0;          
DECLARE i_zaehler decimal(08) DEFAULT 0;          
                                               
 select debgh(dec(debitor)) into i_zaehler     
        from dat018                            
        fetch first row only;                  
 if i_zaehler = 0 then                         
    select d020werta into i_zaehler            
           from dat020 where d020key = debitor;
 end if;                                       
 if i_zaehler = 0 then                         
    select d020werta into i_zaehler            
           from dat020 order by d020werta desc 
                     fetch first row only;     
    set i_zaehler = i_zaehler + 1;             
    insert into dat020 (d020key, d020werta)    
           values(debitor, i_zaehler);         
 end if;                                       
 set returnval = i_zaehler;                    
 RETURN RETURNVAL; 
END
Schritt zwei:
Click image for larger version. 

Name:	fehler1.JPG 
Views:	31 
Size:	38,0 KB 
ID:	536

Das Problem ist ja hier schon das ich keinen Parameter mitgeben kann.
Click image for larger version. 

Name:	fehler2.JPG 
Views:	6 
Size:	28,9 KB 
ID:	537

Aber vielleicht kann mir ja auch so einer einen Tipp geben.

Code:
 select debgh(dec(debitor)) into i_zaehler     
        from dat018                            
        fetch first row only;                  
 if i_zaehler = 0 then
Die Funktin liefert unter bestimmten Umständen eine 1 zurück das heißt der Rest dürfte dann nicht ausgeführt werden und die ganze Funktion gibt mir eine 1 zurück. Tut sie aber nicht. Ich vermute das diese Zeile oben nicht passt.

Für Hinweise dankbar. Benutzen tue ich den Iseries Navigator V6R1M0

GG 4229