-
SQL-Error -312
Hallo zusammen,
ich habe folgenden Code:
Code:
dcl-s strech zoned(15:0);
sqlstmt = 'select sum(strech) +
into :strech +
from rgfussp +
where (' + %trim(getRechnungsnummern()) + ') and +
rechjj = ' + %char(DS_rgkopfp.rechjj);
exec sql
prepare daten from :sqlstmt;
exec sql
execute daten;
Im sqlstmt steht im Debugger
Code:
select sum(strech) into :strech from rgfussp where (rechnr7 = 2040863 or rechnr7 = 2040864 or rechnr7 = 2040865 or rechnr7 = 2040908 or rechnr7 = 2041190) and rechjj = 15
Beim "prepare" kommt der sqlcode -312 zum Vorschein. Die Variable strech ist entweder nicht definiert oder kann nicht verwendet werden. Das verstehe ich aber nicht.
Das SQL an sich funktioniert. Das Problem liegt an der Variablen.
Bitte um Hilfe.
Vielen Dank vorab!
-
Hostvariablen lassen sich leider nicht in einer Variablen "kapseln".
Wenn du den SQL dynamisch benötigst dann musst du leider einen Cursor for Statement definieren und die Daten dann per OPEN/FETCH/CLOSE lesen.
-
Wenn nur ein Datensatz zurückkommt, ist auch beim dynamischen SQL kein Cursor notwendig.
VALUES INTO kann dynamisch aufbereitet werden.
Code:
MySQLStmt = 'VALUES (dynamischAufbereitetesSelectStatement) into ?';
Exec SQL Prepare DynSQL From :MySQLStmt;
Exec SQL Execute DynSQL Using :Strech;
Variablen in (embedded) SQL-Programmen, sollten niemale mit SQL oder SQL beginnen. Diese hat IBM für sich reserviert für den Precompiler reserviert.
Auch wenn diese Variablen heute keine Probleme machen, könnte IBM im nächsten Technology Referesh eine Variable mit dem gleichen Namen in die SQLCA oder SQLDA integrieren. Das beste was dann passieren könnte ist, dass Dein Programm nicht mehr kompliert werden kann. Viel schlimmer wäre, wenn dadurch irgendwelche abstrutsen Ergebnisse zustande kommen würden.
Birgitta
-
Vielen Dank für die Antworten und Tipps!
Wenn ich die Lösung von Birgitta einbaue, bekomme ich an der "Prepare"-Stelle den SQLCODE -199
In der Variablen MySQLStmt steht:
Code:
VALUES INTO select sum(strech) from rgfussp where (rechnr7 = 2040863 or rechnr7 = 2040864 or rechnr7 = 2040865 or rechnr7 = 2040908 or rechnr7 = 2041190) and rechjj = 15 into ?
-
Hallo,
ich würde ja statt der OR Orgie lieber das IN-Statement benutzen, ist kürzer und lesbarer.
GG
-
Schau dir das Beispiel an:
Dein Select bis vor into gehört in Klammern.
Und es hängt vom Release ab, ab wann die Values-Anweisung klappt.
Schön wäre es, wenn du den Fehlertext zu deinem SQL-Code mit liefern könntest.
Steht entweder im Joblog oder in der MSGF QSQLMSG mit "SQLxxxx".
-
... Parameter Markers dürfen nur dort benutzt werden, wo auch ein Literal stehen dürfte. select ... into ? geht also nicht, alleine schon wegen der Typbindung von SQL. Stattdessen sollte man die Werte in der where Klausel durch Parameter Marker besetzen. Also. select ... where feld = ? statt den Wert reinzubasteln, das ist dann stabiler.
D*B
-
Vielen Dank für die vielen Hinweise. Habe es jetzt hinbekommen. Birgitta's Lösung war fast gut. Lediglich das INTO hinter VALUES habe ich rausgenommen. Dann funktioniert alles wie gewünscht!
Similar Threads
-
By PS in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 18-02-03, 20:47
-
By UGildehaus in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-01-03, 18:48
-
By CZE425 in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 13-02-02, 15:40
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 24-10-01, 10:17
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 17-09-01, 14:23
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