Zitat Zitat von KingofKning Beitrag anzeigen
Hallo *all,

mir fehlt jetzt nur noch die Konvertierung von hex nach decimal. Finde es auf Anhieb nicht wie der cast aussehen muß. Weil ohne fällt das Teil ab 000A auf die Nase.

Wie kann man eigentlich solche UDFs debuggen?

Ansonsten sieht meine UDF so aus.

Code:
CREATE FUNCTION rptrade/zaehler /*11.10.19 10:51*/      
( DEBITOR dec(08) ) RETURNS                            
CHAR(04)                                                
LANGUAGE SQL MODIFIES SQL DATA ALLOW DEBUG MODE         
DISALLOW PARALLEL                                       
BEGIN                                                   
DECLARE RETURNVAL CHAR   (04) NOT NULL DEFAULT '0000' ; 
DECLARE i_zaehler decimal(04) DEFAULT 0;                
                                                       
 select d020werta into i_zaehler                       
        from dat020 where d020key = debitor;           
 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, substr(hex(int(i_zaehler)), 5, 4));  
 end if;                                                        
 set returnval = substr(hex(int(i_zaehler)), 5, 4);             
 RETURN LTRIM(RETURNVAL);                                       
END
wenn ich das richtig verstehe, dann schreibst du einen Satz mit '0001' in dem Huddelfeld in die Datei, wenn ein Satz mit einer 0 (mit oder ohne Hierarchie) schon drinsteht.
Im Returnwert gibst Du dann '0001' zurück.
In allen anderen Fällen (kein Satz gefunden, oder schon zwei drin, geht Deine Procedure in die Grütze.

Ist das so gewollt?

D*B