-
Hi,
was genau ist denn das Problem? Lässt es sich nicht kompelieren, oder aufrufen? Gibt es eine Fehlermeldung? ...
Ich hab mir angewöhnt grundsätzlich immer VARCHAR zu verwenden, da mit CHAR der Aufruf oft nicht funktioniert (keine Ahnung warum).
-
HI Andreas,
also erstens muss ich klären wie man eine Konstante
über die UDF an das Serviceprogramm übergeben kann.
Wenn ich statt der Konstante eine Variable übergebe
wird zwar die Prozedur im Serviceprogramm aufgerufen
aber mit Fehler beendet:
PHP-Code:
Nachrichten-ID . . . . : MCH3601 Bewertung . . . . . . : 40
Nachrichtenart . . . . : Abbruch
Sendedatum . . . . . . : 16.06.10 Sendezeit . . . . . . : 16:34:36
Nachricht . . . : Zeiger für angegebene Position nicht gesetzt.
Ursache . . . . : Es wurde ein Zeiger, entweder direkt oder als ein
Basiszeiger verwendet, für den keine Adresse festgelegt worden war.
PHP-Code:
Nachrichten-ID . . . . : CPF503E Bewertung . . . . . . : 30
Nachrichtenart . . . . : Hinweis
Sendedatum . . . . . . : 16.06.10 Sendezeit . . . . . . : 16:34:36
Nachricht . . . : Fehler bei benutzerdefinierter Funktion in Teildatei
STMASTP.
Ursache . . . . : Beim Aufrufen der benutzerdefinierten Funktion HTCOST in
Bibliothek MK ist ein Fehler aufgetreten. Der Fehler trat beim Aufrufen des
zugeordneten externen Programms oder Serviceprogramms BY100SR in Bibliothek
TSTLIBEDC, Programmeingangspunkt bzw. externem Namen Get_HangTag_Cst,
spezieller Name HTCOST, auf. Der Fehler trat bei Teildatei STMASTP Datei
STMASTP in Bibliothek TSTDTAEDC auf. Der Fehlercode ist 2. Fehlercodes und
ihre Bedeutung:
1 -- Das externe Programm oder Serviceprogramm hat SQLSTATE 00000
zurückgegeben. Die vom Programm zurückgegebene Textnachricht ist: .
2 -- Das externe Programm ist vor seiner Beendigung fehlgeschlagen.
3 -- Bei der Datenbank trat ein Zeitüberschreitungsfehler beim Warten auf
die Rückkehr zum Hauptprogramm auf. Der von der Datenbank verwendete
Zeitüberschreitungswert betrug 0 Minuten und 30 Sekunden.
4 -- Das externe Programm ist nicht mehr vorhanden oder wurde nicht
gefunden.
5 -- Bei einem der Eingabeparameter der Funktion ist ein
Datenabgleichungsfehler aufgetreten.
6 bis 20 -- Die vorangegangenen Nachrichten im Jobprotokoll beachten.
Für ein externes Programm ist der angezeigte Programmeingangspunkt *N.
ehlerbeseitigung: Bei Fehlercodes 1 und 2 die Fehlerursache anhand von
SQLSTATE oder einer zuvor aufgelisteten Nachricht feststellen.
Bei Fehlercode 3 entweder den Zeitüberschreitungswert mit Hilfe der
QAQQINI-Dateieinstellung erhöhen oder feststellen, weshalb das externe
Programm oder das Serviceprogramm nicht innerhalb der zugeordneten Zeit
zurückgekehrt ist.
Bei Fehlercode 4 sicherstellen, dass das Programm oder Serviceprogramm für
die Dauer der Abfrage vorhanden ist.
Bei Fehlercode 5 die Ursache für den Datenabgleichungsfehler bestimmen.
Bei Fehlercode 6 bis 22 die vorangegangenen Nachrichten im Jobprotokoll
beachten.
Weitere Informationen über benutzerdefinierte Funktionen enthält das Thema
"DB2 UDB for iSeries SQL Programming" im Information Center unter
http://www.ibm.com/eserver/iseries/infocenter.
Also stimmt etwas mit der Übergabe der Parameter noch nicht.
Im Debugger kommen bis auf die Currency alle Werte an.
Gruß
Michael
-
Das Problem ist, dass die Prozedur nicht richtig definiert ist.
Im Gegensatz zu ILERPG ruft SQL die Prozedur mit allen Feldern als Parameter auf, auch den Returnwert als letzten.
Einen Funktions-Returnwert kennt SQL nicht.
Du musst also auch den Returnwert als Übergabeparameter verwenden.
-
Hi Baldur,
aber wo ?
Am Anfang
oder am Ende der Definition.
Irgendwie ist es nicht meine Woche
Gruß
Michael
-
Um eine Konstante als CHAR zu übergeben musst Du sie beim Aufruf einfach casten:
Code:
Select ...
htcost(stssea, styear, stdiv, ststyl , Cast('EUR' as Char(3))
.....
Beim Registrieren sollte der Funktions-Name im External Name in Groß-Schrift angegeben werden.
Weiterhin ändere ALLOW PARALELL in DISALLOW PARALELL und gib außerdem noch FENCED an. Beides sollte verhindern, dass die Funktion in einem anderen Thread läuft.
@Baldur:
Das war vielleicht früher so und ist noch so, wenn man RPG Programme als UDF registrieren will. Eine RPG-Funktion kann so wie sie ist registriert werden und bei Parameter Style GENERAL (oder SIMPLE CALL) werden nur die in RPG definierten Parameter übergeben (allerdings alle, auch für die optionalen Paramter werden Null-Pointer übergeben).
Birgitta
-
Hallo,
entschuldigung für die späte Rückinfo. Hatte aber erst heute
wieder Gelegenheit mich damit zu beschäftigen.
Und hier die Lösung:
PHP-Code:
CREATE FUNCTION MK/HTCOST (
SAISON CHAR(1) ,
AYEAR DECIMAL(4, 0) ,
DIVISION DECIMAL(2, 0) ,
STYLE CHAR(6) ,
CURRENCY CHAR(3) )
RETURNS NUMERIC(7, 2) CAST FROM NUMERIC(7, 2)
LANGUAGE RPGLE
SPECIFIC MK/HTCOST
NOT DETERMINISTIC
NO SQL
CALLED ON NULL INPUT
DISALLOW PARALLEL
EXTERNAL NAME 'TSTLIBEDC/BY100SR(Get_HangTag_Cst)'
PARAMETER STYLE DB2SQL
Der OpsNav eignet sich sehr gut zur Anlage.
Vielen Dank an alle
Gruß
Michael
Similar Threads
-
By Nils_V in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 18-07-16, 10:49
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 11:15
-
By steven_r in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 19-10-06, 10:12
-
By jakarto in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-07-06, 14:41
-
By HACHIMAN in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 22-05-06, 10:48
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks