-
problem mit eigener sql function
hallo forum
also ich mache die function mit dem operrationsnavigator
erste seite: (allgemein)
name: llerzbez
rück: character
35
Liest SQL-Daten
seite ( parameter)
prm_phznr character 7
seite (SQL-Statment)
PHP-Code:
BEGIN DECLARE BEZ CHAR ( 35 ) ; SELECT CASE WHEN ARERZNR = 3 THEN AGIBEZ WHEN ARERZNR <> 3 THEN ENAME1 END AS BEZ1 INTO BEZ FROM LLART , LLERZ LEFT OUTER JOIN LLARTGRE ON ARARTGRE = AGEARTGRE AND AGEERZNR = ARERZNR LEFT OUTER JOIN LLARTGRI ON AGEARTGRI = AGIARTGRI WHERE ARERZNR = EERZNR AND ARPHZNR = PRM_PHZNR ; RETURN BEZ ; END
nach dem erstellen auf ok.
wird ganz normal umgewandelt und ein srvpgm erstellt.
wenn ich jetzt aber die funktion im interaktiven sql verwenden möchte geht nichts.
PHP-Code:
select LLERZBEZ('1811344') from llart where arphznr = '1811344' // folgender fehler select LLERZBEZ('1811344') from llart where arphznr = '1811344' LLERZBEZ der Art *N in *LIBL nicht gefunden.
wo ist mein fehler ??
-
Wie ist denn der Eingabeparameter definiert ?
Für einen korrekten Funktionsaufruf muss das Format der Eingabedaten 100%ig dem Format der Definition entsprechen.
Man kann nämlich mehrere Funktionen mit gleichem Namen aber unterschiedlichen Parametern definieren.
Für den korrekten Aufruf ist ggf. ein Cast erforderlich:
Ist. z.B. der Eingabeparameter CHAR(10):
select LLERZBEZ(cast('1811344' as char(10)) from llart where arphznr = '1811344'
-
danke für die schnelle antwort.
also der aufruf geht jetzt aber gleich darauf bekomme ich diesen fehler
PHP-Code:
LLART in Bibliothek LLDATA auf. Der Fehlercode ist 1. Fehlercodes und ihre Bedeutung: 1 -- Das externe Programm oder Serviceprogramm hat SQLSTATE 42704 zurückgegeben. Die vom Programm zurückgegebene Textnachricht ist: LLARTQPGMRFILE n QPGMR nicht gefunden. .
-
Ich denke du musst die Dateien mit der Lib qualifizieren !
Wenn nichts explizit gesagt wird, wird eine Tabelle in der Lib mit dem Usernamen gesucht. In deinem Fall anscheinend QPGMR.
Desweiteren musst du den Fehlerfall des Select's (keine Daten) abfangen und NULL zurückgeben.
-
super danke jetzt hauts hin
die qualifizierung geht aber mit punkt
lib.datei
-
Hallo Stefan,
werden alphanumerische Ausdrücke in einem Funktions-Aufruf angegeben, werden diese Ausdrücke als alphanumerische Datentypen mit variabler Länge (VARCHAR) interpretiert.
Da Funktionen überladen werden können, d.h. der gleiche Funktions-Name kann mit unterschiedlicher Parameter-Defintion mehrfach verwendet werden können und für SQL CHAR und VARCHAR unterschiedliche Datentypen sind, wird die Funktion nicht gefunden. SQL sucht nach einer Funktion, deren Parameter VARCHAR ist. Um dieses Problem zu umgehen, musst Du den alphanumerischen Ausdruck in einen Parameter mit fixer Länge umwandeln.
Dies geschieht entweder durch die Verwendung der skalaren Funktion CHAR oder durch CAST.
(CAST sollte aufgrund des SQL-Standards bevorzugt werden.)
PHP-Code:
select LLERZBEZ(Cast('1811344' as Char(35)))
from llart
where arphznr = '1811344'
Birgitta
-
super erklärung
ich wollte nämlich schon fragen obs möglich ist die parameter per value zu übergeben.
hat sich somit erledigt
-
Durch SQL werden die Parameter immer per Value übergeben. Mit den Variablen kann man beliebig arbeiten, da SQL die Inhalte niemals zurückgibt.
Aber Vorsicht:
SQL-Funktionen sind ganz normale Programme/Prozeduren, die auch per CALL aufgerufen werden können.
In diesem Fall muss der Prototyp die VALUE-Klausel enthalten damit der RPG-Compiler Kopierroutinen einbaut.
Sonst würden die Parameter per Reference übergeben (was es eigentlich immer ist) und Änderungen der Inhalte nach oben wirken !!!
-
Die Namenskonvention ist default SQL. Dadurch ergibt sich als Trenner der Punkt.
Mittels "set option ..." können diverse Ergänzungen gemacht werden die ggf. nicht unwichtig sind.
Insbesonders eben
naming=*sql/*sys
dftrdbcol=libxxx <= Bei *sql eben USER, bei *sys=*LIBL
commit=*none/*chg/... <= Bei Updates ganz wichtig
Similar Threads
-
By jakarto in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-07-06, 13:41
-
By Lucky4712 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-05-06, 15:57
-
By Xanas in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 23-02-06, 10:29
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-06-05, 16:21
-
By itec01 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 16-09-04, 18:38
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