[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2011
    Beiträge
    81

    Wie kann man über SQL ein I5-Programm aufrufen

    kann mir jemand ein Beispiel oder einen Link senden, in dem über einen SQL-Statement ein Programm (RPGILE) auf der I5 aufgerufen wird.

    Hintergrund ist:
    Eine Preisfindung (umfangreiches RPG-Programm) in einem Web-Programm über einen SQL-Befehl aufzurufen und das Ergebnis zu erhalten.

    Danke für die Antwort(en)

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    SQL kann zwar einfach ein beliebiges Programm per CALL aufrufen, allerdings nicht so einfach Parameter zurückgeben, z.B.:

    CALL MYLIB.MYPGM ('P1', 123.45)

    'P1' wird als CHAR(2) und 123.45 als PKD(5, 2) übergeben.

    Möchtest du eine Funktion, die genau einen Wert zurückgibt, erstellst du eine SQL-Prozedur mit deinem Programm als externes Programm und definierst alle Parameter mit dem richtigen Typ und IN/INOUT.

    Dann kannst du die Prozedur als Funktion aufrufen (z.B. select MyProc('P1', 123.45) from sysibm.sysdummy1).

    Benötigt dein Programm komplexe Strukturen als Parameter so benötigst du einen Wrapper, also eine SQL-Funktion (extern) die die Einzel-Parameter in die Strukturen überführt, den CALL macht und das Ergebnis liefert.
    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
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    SQL kann zwar einfach ein beliebiges Programm per CALL aufrufen, allerdings nicht so einfach Parameter zurückgeben
    seit wann geht das nicht mehr? Create Procedure erlaubt die Parameter als in, out, oder inout zu deklarieren. Natürlich müssen alle ParameterSQL verträglich sein, wiewohl es da auch Masochisten geben soll, die da im SQL versuchen binäre Daten zu RPG Datenstrukturen (man beachte den feinsinnigen Humor der RPG Verwickler) zusammen zu brutzeln.

    D*B

    PS: Für ein Beispiel müsste man ja zumindest wissen in welcher Sprache die Webanwendung geschrieben ist.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Dieter, du hast meinen Beitrag nicht ganz gelesen. Ich verweise natürlich auf Create Procedure!
    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 2011
    Beiträge
    81
    es geht um eine PHP-Anwendung.
    wir wollen die bestehende Anwendung ohne EASYCOM und ZEND realisieren.

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dieter, du hast meinen Beitrag nicht ganz gelesen. Ich verweise natürlich auf Create Procedure!
    aber miistverständlich. Man muss unterscheiden:
    create procedure
    - kann in, inout und out parameter haben
    - hat keinen Rückgabewert
    - wird mit SQL Anweisung call aufgerufen
    create function
    - hat nur in Parameter
    - hat einen Rückgabewert
    - wird im select, subselect etc. verwendet

    Beide Varianten können in SQL geschrieben werden, oder als external implementiert werden.

    D*B

    PS: PHP ist nicht meine Baustelle
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Man kann den SQL-Code zur Definition einer Procedure oder Function auch generieren lassen. Der iSeries Navigator kann dann. Über Datenbanken -> Schema -> ... mit der rechten Maustaste auf Funktionen (oder auf Prozeduren) gehen und dort "Neu" anklicken. Dann "extern" auswählen. Dann kann man die erforderlichen Parameter für das gewünschte Programm eingeben. Für eine externe Funktion muss das Programm ein Serviceprogramm sein. Für Procedure muss es ein "normales" PGM sein.

    Dieter

  8. #8
    Registriert seit
    Oct 2013
    Beiträge
    171
    php auf dem System i ohne Zend? Schwer vorstellbar.
    Aber die vielen $$$ muss man auch nicht ausgeben; php funktioniert auch ohne Bezahl-Zend-Server.
    Und im kostenlosen Teil gibt es auch das sogenannte Toolkit.
    Damit ist das Aufrufen von Programmen mit Parametern recht einfach.
    http://files.zend.com/help/Zend-Serv...vice_class.htm

  9. #9
    Registriert seit
    Jan 2001
    Beiträge
    833
    Zitat Zitat von MR-BN Beitrag anzeigen
    es geht um eine PHP-Anwendung.
    wir wollen die bestehende Anwendung ohne EASYCOM und ZEND realisieren.
    Hi,

    also den ZEND Server muss man schon installieren. Der ZEND Server ist aber kostenfrei.

    Wie meine Vorredner schon geschrieben haben ist eine SQL Stored Procedure die richtige Wahl.

    Den EASYCOM oder XMLToolkit Kram sollte man vergessen. Den benötigt man nicht.
    Im PHP gibt es dafür die db2...... Funktionen.
    Damit lässt sich alles realisieren.

    Und hier ein kleines Beispiel für den Aufruf einer SQL Stored Procedure in PHP:

    PHP-Code:
    <?php
    //============================================================================
    // Handlerprogramm APPLIC01R über stored procedure aufrufen
    //============================================================================
    function call_APPLIC01R$ActRoutine$ActParms$ActDelim$conn )
    {
        
    $pr_call "call PRC_APPLIC01R ( ?, ?, ?, ?, ?)";

            
    $stmt  db2_prepare($conn$pr_call);
              if(!
    $stmt ) {
                 die (
    "Error by prepare "db2_stmt_error() );
                 }
                
    $ACTROUTINE   =    $ActRoutine;
                
    $ACTPARMS    =    $ActParms;
                
    $ACTDELIM   =    $ActDelim;
                
    $OUTPRM1    'xx';
                
    $OUTPRM2    'yy';
                
        
                
    db2_bind_param ($stmt1"ACTROUTINE"DB2_PARAM_INOUT);
                
    db2_bind_param ($stmt2"ACTPARMS",  DB2_PARAM_INOUT);
                
    db2_bind_param ($stmt3"ACTDELIM"DB2_PARAM_INOUT);
                
    db2_bind_param ($stmt4"OUTPRM1"DB2_PARAM_INOUT);
                
    db2_bind_param ($stmt5"OUTPRM2"DB2_PARAM_INOUT);

                
    $result db2_execute($stmt);
                    if (!
    $result ) {
                      die (
    "Execute failed:".db2_stmt_error($stmt) ."Message=".db2_stmt_errormsg($stmt));
                      }
                
    $aReturnVal  $OUTPRM1.$OUTPRM2 ;

            return 
    $aReturnVal;
    }

    Wichtig ist die Zuweisung der Parameter und deren Parametertyp.

    Ich habe diverse PHP Anwendungen mit den Stored Proceduren erstellt
    und es läuft sehr stabil.
    Als GUI Frontend bediene ich damit eine Flex, ExtJS und JQWidget Applikation

    Für komplexere DB Abfragen ( Resultsets) habe ich mir ein Tool erstellt das die
    SQL Stroed Proceduren und die PHP Scripte automatisch erstellt.

    Also dann viel Erfolg.

    Gruß
    Michael

  10. #10
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Der ZEND Server ist aber kostenfrei.
    Nach meiner Kenntnis gibt es seit Version 7 keinen kostenlosen ZEND-Server mehr. Das wurde mir zumindest von ZEND so mitgeteilt. Oder habe ich hier etwas übersehen?

    Gruß,
    KM

  11. #11
    Registriert seit
    Jan 2007
    Beiträge
    905
    Sieht so aus, dass jemand diese Frage auch schon gestellt hat...
    http://www.alanseiden.com/2014/12/09...ists-on-ibm-i/
    kf

  12. #12
    Registriert seit
    Aug 2014
    Beiträge
    179
    Ich habe noch eine Frage zum Thema:

    wird das RPG-Programm für die Preisfindung aus dem PHP heraus aufgerufen oder ist es auch möglich, das RPG über Javascript und AJAX aus der Webanwendung heraus aufzurufen?

    Viele Grüße

    Rainer

Similar Threads

  1. ILE aus /36 aufrufen
    By Norbertf in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-10-14, 20:32
  2. Antworten: 2
    Letzter Beitrag: 24-04-03, 12:05
  3. Kann ich über Visual Basic ein CL starten?
    By hs in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 26-02-03, 09:58
  4. Batch-Programm aus RPG aufrufen?
    By hansr in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 28-11-02, 16:38
  5. AS400-Datei über FTP in CL-Programm
    By froehlich in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 22-11-02, 12:59

Berechtigungen

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