[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    jede exportierte Prozedur aus einem Service-Programm kann entweder als externe Stored Procedure oder als externe User Defined Function registriert werden.

    Als Stored Procedure wird eine Prozedur registriert, die keinen Rückgabewert hat. Eine Funktion, also eine Prozedur mit Rückgabewert kann als externe UDF registriert werden.

    Beim externen Namen, muss lediglich das Service-Programm und die Prozedur angegeben werden

    Beispiel:
    PHP-Code:
    CREATE FUNCTION MYUDF (                        
           
    Parm1 CHAR(7) ,                          
           
    Parm2 DEC(155) ...) )                    
           
    RETURNS VARCHAR(256)                        
           
    LANGUAGE RPGLE                     
           DETERMINISTIC                            
           NO SQL                                   
           RETURNS NULL ON NULL INPUT               
           NO EXTERNAL ACTION                       
           NOT FENCED                               
           EXTERNAL NAME 
    'MYSCHEMA/MYSRVPGM(MYPROC)'   
           
    PARAMETER STYLE GENERAL 
    Birgitta Hauser

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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Allerdings muss diese Serviceprozedur gewisse Aufrufkonventionen (Übergabeparameter wie NULL-Flag's, SQLSTATE, Functionname, Specificname und DiagnosticMessage) einhalten.

    Angaben siehe "Parameter Style".

    Ich gehe mal davon aus, dass diese Konventionen bei obigen Serviceprozeduren nicht eingehalten wurden und somit sich ein direkter SQL-Aufruf ausschliessen läßt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2004
    Beiträge
    136
    Ähm vielen Dank schon mal, der Aufruf funktioniert schon mal super, nur ein Problem habe ich noch, der Rückgabe wert ist ein N (Boolean) als was muss ich den Return dann in der Create function angeben?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Boolean geht nicht, versuchs einfach mit CHAR(1) bzw. ZONED(1, 0) und konvertiere den Wert passend.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Sep 2004
    Beiträge
    136
    Typenkonvertierung in der SQL Funktion oder in der Serviceprogrammfunktion, dass wäre schlecht, denn die kann ich nicht ändern, die wir ja schon in Tausenden Programmen verwendet.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da du die SQL-Funktion doch neu machst, kannst du auch spezifizieren wie diese auszuwerten ist:

    select case myfunction(parm) when 1 then 'TRUE' else 'FALSE' end, ...

    oder

    select case myfunction(parm) when 'Y' then 'TRUE' else 'FALSE' end, ...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Allerdings muss diese Serviceprozedur gewisse Aufrufkonventionen (Übergabeparameter wie NULL-Flag's, SQLSTATE, Functionname, Specificname und DiagnosticMessage) einhalten.

    Angaben siehe "Parameter Style".

    Ich gehe mal davon aus, dass diese Konventionen bei obigen Serviceprozeduren nicht eingehalten wurden und somit sich ein direkter SQL-Aufruf ausschliessen läßt.
    Sorry hätte natürlich Parameter Style GENERAL sein müssen. (Im Beispiel oben geändert)
    Bei GENERAL werden tatsächlich nur die beim Aufruf angegebenen Parameter übergeben.
    (Bei Parameter Style SQL kommts auch nicht zum Abbruch, wenn die zusätzlichen Parameter nicht im Procedure Interface definiert sind, aber es ist unsauberes Design!)

    @Xanas:
    Bei Rückgabe-Wert N kann (zumindest seit V5R3) in der Definition der Funktion CHAR(1) ausgegeben werden, ohne weitere Konvertierung.
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Sep 2004
    Beiträge
    136
    Vielen lieben Dank noch mal an euch Drei.
    Wo wäre ich, wenn es dieses Forum nicht gäbe, die Sache funktioniert mittlerweile echt super.

    Ich habe mich dann für den Char(1) entschieden, der funktioniert auch wie erwartet.

    Gruß
    Xanas

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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