1. In der SQL Programmierung kann man wie beim embedded SQL dynamisches SQL verwenden.
  2. Was in der SQL-Programmierung nicht geht, ist Datenstrukturen zu verwenden. Wenn also SELECT * FROM verwendet wird (statisch oder dynamisch) spielt dabei keine Rollen, müssen die Spalten einzeln in lokale (Host-)Variablen ausgegeben werden.
  3. Wenn der Datei-Aufbau identisch ist, sich lediglich die Bibliothek ändert, sollte die Ausgabe in immer die gleichen Variablen kein Problem sein. Besser wäre allerdings gezielt die benötigten Spalten auszuwählen.
  4. Wenn tatsächlich nur eine Variable und eine Zeile ausgelesen werden soll, kann das in der SQL-Programmierung sehr elegant mit dynamischem SQL gelöst werden:



Code:
create function HSCOMMON10/getHist_WP (MyLib      varchar (20),
                                       KennNummer varchar (7))

       returns varchar (40)
       language sql
       reads sql data
       no external action
       returns null on null input

       Set Option DbgView = *Source

Begin
   Declare ResultHis varchar (30) Default '';
   Declare CmdString VarChar(256) Default '';

   Set CmdString = 'Values (select Feld From ' concat Trim(MyLib) concat
                                                      '.MyTable ' concat
                              ' where KennNr = ?' concat
                              ' Fetch First Row Only) into ?';

   Prepare DynSQL From CmdString;
   Execute DynSQL Using KennNummer, ResultHis;

   Return ResultHis;
End
Seit den letzten Neuerungen kann man das dynamische SQL-Statement auch direkt beim PREPARE zusammenknüppeln, d.h. die extra Variable ist nicht mehr notwendig

  • SQLPATH wird verwendet um unqualifiziert angegebene Stored Procedures, User Defined Functions und User Defined Table Functions zur Laufzeit aufzufinden, wenn SQL-Naming verwendet wird.
  • CURRENT_SCHEMA (oder DEFAULT SCHEMA) wird für ünqualifiziert angegebene Tabellen oder Views verwendet unabhängig davon, ob SQL- oder System-Naming verwendet wird.
    Wird bei System-Naming das CURRENT_SCHEMA angegeben wird die Bibliotheksliste ingoriert.
    Wird SQL-Naming verwendet, wird zur Compile-Zeit für statisches SQL die Bibliothek über das CURRENT SCHEMA ermittelt und hart in das Objekt übernommen (alternativ kann die DEFAULT Bibliohtek auch über die Option DFTRDBCOL im SET OPTION Statement fix gesetzt werden.
    Für dynamisches SQL kann beim SQL-Naming über die Option DYNDFTCOL im SET OPTION statement festgelegt werden, ob zur Laufzeit das CURRENT SCHEMA ermittelt wird, oder ob das gleiche Schema wie für das statische SQL verwendet wird.
    Beim System-Naming wird die Bibliotheksliste abgegriffen.



Birgitta