[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2018
    Beiträge
    94

    Zugriff von Node.js via Stored Procedure auf i5

    Hallo,

    wir wollen von Node.js aus via Stored Procedure und ODBC auf ein RPGLE-Programm zugreifen um Daten zu ermitteln.

    Ganz grob funktioniert das wie folgt:

    Es kommt eine Anfrage von Node.js via Stored Procedure auf die i5. Dort werden die Daten ermittelt und wieder zurückgegeben.

    Die Anfrage (es werden 2 Parameter übergeben) kommt korrekt an. Nach der beendigung meines Programmes kommen die Werte jedoch nicht im Zielsystem an.

    Ich poste mal den Code:

    =============================

    var sql = `CALL PPSO.SP_KNKTON1(?,?)`

    odbc.connect(dsn, (error, connection) => {
    connection.query(sql, ['DE',''], function(err, result) {
    if(err) {
    console.log(err)
    } else {
    console.log(result)
    }
    connection.close()
    })
    });
    =========================

    es wurde auch so versucht:

    =========================

    async function callProcedureExample(res) {
    const dsn = "DSN=NodeJS;UID=XXXX;PWD=XXXX"
    try {
    const connection = await odbc.connect(dsn);
    const result = await connection.callProcedure(null, 'PPSO', 'SP_KNKTON1', ['DEcdeabcde', 'abcdeabcde']);
    console.log(result);
    } catch(err) {
    console.log(err)

    =========================

    Beides funktioniert leider nicht!

    Die Console zeigt folgendes an:


    =========================

    Statement: 'CALL PPSO.SP_KNKTON1(?,?)'
    parameters: [ 'DE', '' ],
    return: undefined,
    count: 0,
    columns: ]

    =========================

    Fakt ist, dass das ILE-Programm sauber funktioniert, der Aufruf korrekt ist (die Parameter werden übergeben), jedoch im rufenden System nichts zurückkommt.

    Hat jemand eine Ahnung warum die Rückgabe nicht funktioniert? Via. PHP-Script funktioniert es einwandfrei!


  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Wenn die Funktion einen Return zurückgeben soll dann per :

    call ? function(?, ?)

    Der 1. Parameter ist dann der Return.
    Alternativ geht aber auch einfach:

    values(function(?, ?))

    Dies entspricht der Kurzform "select function(?, ?) from sysibm.sysdummy". Du bekommst dann also ein Resultset zurück, dass genau 1 Satz mit dem Ergebnis enthält.
    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
    Nov 2020
    Beiträge
    315
    Eine SQL Prozedur hat keinen Rückgabewert, außer ein Result-Set einer SQL Abfrage.
    Die Rückgabewerte werden über die Parameter (IN, INOUT, OUT) definiert.
    Dementsprechend wären von mir mal die Fragen:
    * Wie ist das RPG definiert (Parameter, Rückgabewerte falls Prozedur)
    * Wie ist die SQL Prozedur definiert (IN/OUT Parameter)
    * Im NodeJS müssen dann die Parameter mit einer Variable gebunden werden, sodass du dann dort die Rückgabewerte der Parameter hinein bekommst.

    Anders sieht es dann bei einer SQL Funktion aus.

    lg Andreas

Similar Threads

  1. Zugriff auf oracle-db im Netzt mit OracleDB Node.Js Module
    By Peet in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 16-04-20, 21:04
  2. Fehler bei Stored Procedure
    By KM in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 25-11-17, 11:09
  3. Stored Procedure endlos
    By lorenzen in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 12-12-02, 17:46
  4. Java stored procedure
    By Sven Schneider in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-09-02, 08:31
  5. Stored Procedure
    By lorenzen in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 27-08-02, 15:59

Tags for this Thread

Berechtigungen

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