[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    136

    SQL und Servicprogramme

    kann man im SQL auch eine bestimmte Prozedur aus einem Servicepramm aufrufen?

    Grund ich habe ein Servicprogramm, dass sich um Berechtigungen kümmert mit mehreren Externen Prozeduren. Ich möchte aber eine Bestimmte aufrufen.

    Xanas

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    das Zauberwort heißt create function

    mfg

    Dieter Bender
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ergänzung:

    Wobei mit "Create Function" keine SQL-Prozedur (native SQL-Body) sondern eine externe SQL-Prozedur erstellt werden muss.

    Die externe SQL-Prozedur kann dann ein RPGLE-Programm sein, dass dann die gewünschten Service-Routinen aufruft.
    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

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Ergänzung der Ergänzung: und selbige nicht mit CALL aufgerufen, sondern in einem select verwendet werden kann.

    d*b
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    OK, dann gibts noch die Alternative mit "Create Procedure", für die die selben Bedingungen gelten, wie oben, diese muss dann per CALL aufgerufen werden:

    call myprocedure (Parm1, Parm2, ...)

    select myfunction(Parm1, Parm2, ...) from myfile
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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

  8. #8
    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?

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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

  10. #10
    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.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

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
  •