Rekursive Prozeduraufrufe in SQLScript

Rekursive Prozeduraufrufe in SQLScript

Veröffentlicht am 5. November 2019 von

Jörg Brandeis

| News | SQLScript |


Bis SAP HANA 2.0 SPS03 waren rekursive Aufrufe Prozeduren in SQLScript nicht erlaubt. Das bedeutet, dass sich eine Prozedur weder direkt noch indirekt über andere Prozeduren aufrufen darf. Diese Einschränkung wurde mit dem SPS04 aufgehoben. Allerdings ist die Aufruftiefe auf 32 beschränkt und Prozeduren in Bibliotheken erlauben ebenfalls keine rekursiven Aufrufe. In sehen Sie ein Beispiel für die rekursive Berechnung der Fibonacci Zahlen. Bitte seien Sie vorsichtig, wenn Sie diese Prozedur mit zu großen Parametern (>20) aufrufen, kann es schnell passieren, dass das SAP HANA System an seine Grenzen kommt.

 CREATE PROCEDURE  fibonacci (IN iv _value INT,
                            OUT rv _result INT)
 AS BEGIN
   DECLARE lv _tmp INT;
   
   IF iv _value IN (1, 2)
     THEN rv _result = 1;
   ELSE
      fibonacci ( iv _value - 1 , rv _result );
      fibonacci ( iv _value - 2 , lv _tmp );
     rv _result = rv _result + lv _tmp;
   END IF;
 END; 
  
 CALL fibonacci(20, ?); 

Listing: Rekursive Berechnung der Fibonacci-Zahlen

Hier ist der Link zur SAP Dokumentation zu dem Thema. Soweit mir bekannt ist, werden keine rekursiven Abfragen unterstützt.