[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    111

    SQL Function aus RPGLE aufrufen...

    Hallo liebe RPG Gemeinde,

    ist es möglich aus einem RPG Programm heraus eine SQL Function aufzurufen ?

    Habe mal etwas rumprobiert:

    Code:
     
    D PgmCALL         PR                  ExtPGM(FU074)             
    D   Parm1                        3    INZ(*blanks)                
    D   Parm2                       4  0 INZ(*zeros)                 
    D   Parm3                       1    inz(*blank)                  
    D   Parm4                      21    Inz(*blanks)              
     *                                                              
     *                                                              
    D   string        S             21    inz(*blanks)              
     *                                                              
     *                                                              
    C                   CALLP     pgmCALL('100':1234:'1':string) 
     
    C                   if        string > *blanks              
     *                  // 
    C                   ENDIF                                  
     *                                                         
    C                   eval      *inlr = *on

    FU074 ist die erstellte Function (Modul), ein Serviceprogramm mit dem Namen FU074 gibt es auch...

    Function wurde wie folgt erstellt:

    Code:
    CREATE FUNCTION PGM/FU074                    
           ( MANDANT CHAR(3),                    
             KST DEC(4, 0),                      
             ART CHAR(1)                         
           ) RETURNS CHAR(21)                    
           LANGUAGE RPGLE                        
           EXTERNAL NAME 'PGM/FU074(SQL_FUNC)'   
           NO SQL                                
           NO EXTERNAL ACTION

    Der Compiler teilt mir 7030 er Fehler mit, FU074 ist nicht definiert und Parameter kann nicht nach Referenz übergeben werden, wenn er
    beim Aufruf geändert werden kann.

    Umgewandelt habe ich mein Testprogramm mit dftactgrp *no

    Hoffe auf Eure Antworten,
    Gruß
    Mäxxchen

  2. #2
    Registriert seit
    Mar 2005
    Beiträge
    74
    Hallo,

    SQL-Funktionen lassen sich per embedded SQL aufrufen:

    Code:
    C/EXEC SQL
    C+  SET :ERGEBNIS = SQLFUNKTION(:parm1, :parm2, ...)
    C/END_EXEC
    Gruß
    M.Withake

  3. #3
    Registriert seit
    Jul 2001
    Beiträge
    2.658
    Zitat Zitat von Bratmaxxe
    Hallo liebe RPG Gemeinde,

    ist es möglich aus einem RPG Programm heraus eine SQL Function aufzurufen ?
    VIelleicht stehe ich grade auf dem Schlauch (nein, ich sitze), aber wie wäre es mit embeddet SQL? Dazu finden sich hier doch einige Artikel, und Experten und Expertinnen liegen auf der Lauer, um Dir zu helfen ;-)

    -h

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.377
    c/exec-sql
    c+ set myvar = mysqlfunc(parm1, parm2, ...)
    c/end exec

    Da es eine SQL-Funktion ist, musst du auch SQL bemühen.
    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
    Jan 2006
    Beiträge
    111
    der code der function ist wie folgt:

    Code:
     
    H NOMAIN  
     
    FT3TABPK   IF   E           K DISK
     
     DSQL_FUNC         PR            21A      
     D MANDANT                        3       
     D KST                            4  0    
     D ART                            1       
     
    PSQL_FUNC         B                   EXPORT 
    DSQL_FUNC         PI            21A     
    D MANDANT                        3      
    D KST                            4  0   
    D ART                            1      
     
     C* //Initialisierung Work-Felder                   
     D TEXT3           S              3    INZ(*BLANKS) 
     D TABELLE         S             10    INZ('N0210') 
     D VERSION         S              1    INZ('1')     
     D KST15           S             15                 
     D STRING          S             21    INZ(*BLANKS) 
     C* 
     
     // Datei lesen..... usw.
     
     C                   RETURN    STRING                                
     C* -----------------------------------------------------------------
     C* ENDE der Prozedur                                                
     C* -----------------------------------------------------------------
     C                   CLOSE     T3TABPK                               
     PSQL_FUNC         E
    Es gibt dazu ein Modul und ein Serviceprogramm.

    Die Function an sich ist ja kein SQL, sondern normal RPG, ich verstehe nur nicht, warum man die nicht anders aufrufen kann ?

    MfG
    Mäxxchen

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.893
    Hallo,

    Eine (RPG-)Funktion ist eine Prozedur mit Rückgabe-Wert, die nicht mit CALLP sondern z.B. über EVAL oder IF oder DOU ... usw. wie eine Built-In-Funktion aufgerufen wird.

    Also z.B.

    PHP-Code:
    /Free
         Ergebnis 
    MyFunc(Param1Param2: ... ParamX);
         If 
    MyFunc2(Parm) > *Zeros;
         EndIf;
    /
    End-Free 
    Auch wenn eine RPG-Funktion als SQL-Funktion registriert ist, kann ich sie immer noch native aufrufen.

    Bei der Registrierung einer externen Funktion als SQL-Funktion wird dieser Funktion lediglich eine SQL-Kennung zugeordnet, über die diese Funktion aus SQL heraus aufgerufen werden kann.

    Birgitta
    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.377
    Die Funktion steckt in einem Service-Programm, also musst du die Funktion als externe Funktion und nicht als Programm deklarieren und anschließend mit dem Serviceprogramm binden.

    1. CRTRPGMOD
    2. CRTPGM ... BNDSRVPGM(...)
    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
    Jan 2006
    Beiträge
    111
    Vielen lieben Dank !

    Gruß
    Mäxxchen

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. User defined function
    By KM in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-08-06, 10:34
  3. SQL UDF Function ausführung mit Fehler
    By jakarto in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-07-06, 13:41
  4. problem mit eigener sql function
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 26-05-06, 16:37
  5. CREATE SQL FUNCTION
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 23-02-06, 10:29

Berechtigungen

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