Anzeiger-Variable meint meist, dass ein NULL-Wert irgendwo verwendet oder verglichen wird. Geprüft werden NULL-Werte i.d.R. über Anzeiger-Variablen.

Wo berechnest Du eigentlich Preis2?
Soweit ich das sehen kann nirgends. Preis2 wird mit einem NULL-Wert inititalisiert und anschließend wird dieser NULL-Wert mit 0 verglichen (IF Preis2 > 0) und das funktioniert nicht.

1. Initialisiere alle deklarierte Variablen
2. Anstatt das numerische Tagesdatum in den Cursorn zu berechnen würde ich eine separate variable definieren und nur einmalig initialisieren.
3. Anstatt der Cursor mit For-Schleifen würde ich ein einfaches SELECT ... INTO verwenden.
4. Sicherheitshalber würde ich den Preis über COALESCE in einen Default-Wert (z.B. 0) konvertieren.

Etwa so:
Code:
CREATE FUNCTION rptrade/artpreis3 ( ARTIKELNR dec(10),                                    
                                     Kundennr  dec(10)  )                                   
        RETURNS CHAR(10) 
        LANGUAGE SQL 
        READS SQL DATA 
BEGIN              
   DECLARE RETURNVAL CHAR ( 10 ) NOT NULL DEFAULT '0,00' ; 
   DECLARE preis1  dec ( 10, 0 ) NOT NULL Default 0;                             
   DECLARE Preis2  dec ( 10, 0 ) Not NULL Default 0;   
   Declare DateNum Dec( 8, 0 )  Not NULL Default 0;

   Set DateNum = Dec(VarChar_Format(Current_Timestamp, 'YYYYMMDD'), 8, 0);

   Select Coalesce(SOEIPR, 0) into Preis1
     From RPTRADE/ArtPreis1
     Where        SOID2 = ARTIKELNR                    
           and (   sodnbi  = 99999999                   
                or sodnbi >= DateNum)            
     order by sodnbi desc 
  fetch first row only;

   Select Coalesce(SOEIPR, 0) into Preis2
     From RPTRADE/ArtPreis2
     where      SOID4 = ARTIKELNR                   
           and  soid1 = kundennr                    
           and (   sodnbi = 99999999                  
                or sodnbi >= DateNum)           
           order by sodnbi desc 
   fetch first row only;           
                                         
  if Preis2 > 0 then set preis1 = Preis2; 
  end if ;  
  SET RETURNVAL = cast(preis1 as char(10));  
  RETURN LTRIM(RETURNVAL) ;                  
END
Birgitta