PDA

View Full Version : Zugriff von Node.js via Stored Procedure auf i5



Frankk
23-11-21, 13:46
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!

Fuerchau
23-11-21, 15:51
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.

Andreas_Prouza
23-11-21, 18:49
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