[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.102

    SQL UDFs und RPG, Probleme bei optionalen Parametern

    Hallo,
    heute habe ich mal keine Frage, sondern nur einen Hinweis. Wenn wir User defined Functions in SQL geschrieben haben, die ein RPG-Programm verwenden, dann haben wir optionale Parameter immer in der folgenden Form behandelt:

    Code:
    dcl-proc testproc *export;
        dcl-pi *n;
            fromDate date(*iso) options(*nopass:*omit);
        end-pi;
    if %parms >= %parmnum(fromDate) or %parms < 0 and %addr(fromDate) <> *NULL;
       myDate = fromDate;
    endif;
    end-proc;
    
    Falls das Programm von einem anderen RPG-Programm aufgerufen wird, wirkt der Teil:
    if %parms >= %parmnum(fromDate)

    Falls das Programm von SQL aufgerufen wird, werden keine Parameter über die RPG-Parameter-Strategie übergeben. Stattdessen gibt %parms = -1 übergeben. Es wirkt also folgender Code:
    if %parms < 0 and %addr(fromDate) <> *NULL;

    Das codieren wir bereits seit Jahren so und es hat bisher keine Probleme gemacht. Gerade hat Barbara Morris im developerWorks Formum geschrieben, dass das Verfahren so nicht sicher ist. Sie schreibt sogar, dass es unmöglich sei, in RPG sicher festzustellen, ob ein Parameter von SQL aus übergeben wurde.

    Also aufpassen und optionale Parameter lieber direkt im SQL handeln.

    Dieter

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Deshalb gilt auch, dass man für externe UDFs mit optionalen Parametern für jede Parameter-Kombination eine (RPG)-Funktion generiert, die nichts anderes macht als die Orignial-Funktion aufzurufen. Diese Funktionen werden dann alle mit dem gleichen Namen (Überladung) registriert.

    Alternativ kann man auch die externe Funktion mit allen Parametern registrieren und bei den optionalen Parametern Default-Werte hinterlegen. Werden beim Aufruf der Funktion dann nicht alle Parameter übergeben, werden für die fehlenden Parameter die Default-Werte übergeben.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Danke Birgitta.
    Wir werden in Zukunft vorsichtiger sein bei optionalen Parametern.

    Dieter

Similar Threads

  1. UDTF mit optionalen Input-Parametern
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 09-10-17, 10:42
  2. SQL mit enthaltenen Parametern innerhalb von CL's
    By _MG_ in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 12-12-15, 13:07
  3. UDFs und Performance
    By BenderD in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 26-05-14, 17:35
  4. Frage zu RPG: Aufruf RPG-Programm mit Parametern
    By hs in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 09-10-01, 13:06
  5. Probleme mit AFP
    By Flappes in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-08-01, 17:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •