Problem mit dynamischem Multi-Row-Insert
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 14 Jahre, 11 Monaten von
Anonym.
-
AuthorPosts
-
17. Oktober 2008 um 14:01 Uhr #4003
AnonymInaktivHallo Leuts,
ich würde gerne den Multi-Row-Insert dynamisch absetzen. Der Parameter "NOT ATOMIC …" wird ja dann vom Prepare übernommen, das "FOR :n ROWS" vom EXECUTE (ohne IMM).
Der EXECUTE bekommt ja lt. Syntax auch über USING die Arrays mitgegeben (was ja auch Sinn macht).Hört sich simpel an, aber …
Bereite ich den INSERT mit den Arrays als VALUES auf, gibts beim PREPARE einen -312 (HostVars im Dynamiker). Gebe ich feste Werte mit, wird unabhängig von :n ROWS und den Werten in den Arrays genau ein Satz (natürlich der preparte) eingefügt und der EXECUTE bekommt einen -254.
Lasse ich beim INSERT die VALUES weg, gibts nen -104 beim Prepare 🙁Hat jemand einen Tipp für mich??
Danke,
Alexander
20. Oktober 2008 um 13:10 Uhr #4176
AnonymInaktivhier ein kleines Testprogramm, das 5 Zeilen einfügt:
( das I NSERT muss natürlich zusammen geschrieben werden, aber wenn ich das mache, bekommt das Forum einen internal error )DBXXX: PROC OPTIONS(MAIN) ; Â
exec sql include sqlca ;
dcl sqlstmt char(80) var ; Â Â
dcl area(5) char(1) init (‚1′,’2′,’3′,’4′,’5‘);
dcl attr char(30) init (‚FOR MULTIPLE ROWS‘) ; Â
dcl n bin fixed(15) init (5);sqlstmt = ‚ I NSERT INTO hugo VALUES ( ? ) ‚; Â Â
exec sql prepare stmt attributes :attr  from :sqlstmt;put skip edit (‚PREPARE, SQLCODE =‘,sqlcode ) (a,a); Â
exec sql execute stmt using :area for :n rows ;
put skip edit (‚EXECUTE, SQLCODE =‘,sqlcode ) (a,a); Â
end dbxxx ;
 Â
20. Oktober 2008 um 14:45 Uhr #4310
AnonymInaktivwas so ein lausiges kleines Fragezeichen alles kann 😕
das war genau das was ich gesucht habe. Wo hätte man das nachlesen können? Aus dem Syntaxdiagramm ist das (für mich) nicht zu erkennen.
Danke Dir!
Alexander
-
AuthorPosts
You must be logged in to reply to this topic.