-
SQL - insert plus select mit inkremetiertem Wert?
Hallo zusammen,
ich hoffe, es ist okay, wenn ich den alten Thread wieder aufwärme. Ich habe ein ähnliches Problem wie der Ursprungsposter und habe es wie von Fuerchau vorgeschlagen mittels "create sequence" und "next value" versucht. Leider hat das nicht funktioniert. Vielleicht habe ich auch nur die sequence an der falschen Stelle created.
Code:
// cHk = CONST Hochkomma
chrSQL = ' +
insert into datei4 +
(dnr, dlabel, dname) +
( +
( +
select NEXT VALUE FOR seq_zaehler ,' +
cHk + $name + cHk + ', NAME from datei1 +
) +
union +
( +
select NEXT VALUE FOR seq_zaehler ,' +
cHk + $name2 + cHk + ', NAME from datei2 )' +
'order by '+ chrSort + ' ' + chrSortR + ')+
)';
exec sql set option commit=*none;
exec sql prepare IINSERT from :chrSQL;
exec sql create sequence seq_zaehler start with 1 increment by 1 no maxvalue;
exec sql execute IINSERT;
(RPG/V6R1)
Das Ergebnis ist SQLCOD -518.
Ist das so überhaupt möglich?
Vielen Dank für jeden Hinweis!
K.
-
NEXT VALUE geht nicht beim Select!
Die Syntax ist
insert into myfile
(seqfld, feld1, feld2, feld3)
values(next value for myseq, wert1, wert2, wert3)
Du siehst, ein "Insert ... select ... from ..." funktioniert hier nicht.
Du musst dann die Tabelle mit einer AutoIncrement-Feld erstellen und dieses Feld beim Insert dann weglassen:
create mytable (myseq as identity, ...)
PS:
Hier noch mal ein genaues Beispiel aus dem Handbuch:
CREATE TABLE EMPLOYEE2 (
EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
ID SMALLINT,
NAME CHAR(30),
SALARY DECIMAL(5,2),
DEPTNO SMALLINT)
-
Das Problem ist, dass NEXT Value For nicht direkt in Verbindung mit Union-Anweisungen zulässig ist.
Das Statement sollte funktionieren, wenn Du die Union-Anweisung als Sub-Select definierst.
Etwa so:
PHP-Code:
insert into LastTable (DNr, Dlabel, DName)
(Select Next Value for Seq_Zaehler, x.*
From (Select FldLabel, FldName from MyTable
Union All
Select XYZLabel, XYZName from NextTable) x
Birgitta
-
Danke für die Tipps! Ich habe es nun wie in Birgittas Beispiel versucht.
 Zitat von B.Hauser
Das Statement sollte funktionieren, wenn Du die Union-Anweisung als Sub-Select definierst.
Etwa so:
PHP-Code:
insert into LastTable (DNr, Dlabel, DName) (Select Next Value for Seq_Zaehler, x.* From (Select FldLabel, FldName from MyTable Union All Select XYZLabel, XYZName from NextTable) x
Birgitta
Das einzige Problem, das ich noch hatte, war, dass die Sequenz bei jedem Programmaufruf wieder bei 1 anfangen soll.
Das habe ich nun so gelöst:
PHP-Code:
exec sql drop sequence seq_zaehler; exec sql create sequence seq_zaehler start with 1 increment by 1 no maxvalue order;
Es funktioniert, aber ist es auch eine gute Idee?
Nochmals vielen Dank an euch!
Markus
-
Einfacher gehts mit
ALTER SEQUENCE MySequence RESTART
-
 Zitat von Kurmas Zeschlon
...
Code:
...
exec sql set option commit=*none;
...
SET OPTION muss der erste Befehl sein den Du ausführst.
-
SET OPTION muss der erste SQL-BEFEHL sein der ausgeführt werden muss, und das ist in dem vorherigen beispiel der fall.
-
Korrektur:
PHP-Code:
SET OPTION muss der erste Befehl sein den Du ausführst.
SET OPTION wird überhaupt nicht ausgeführt!
SET OPTION sind Compiler-Anweisungen und müssen deshalb (so ist halt der SQL-PreCompiler implementiert) physisch in der Quelle vor allen anderen SQL-Statements stehen!
Würde SET OPTION in der *INZSR stehen, die am Ende der Quelle steht und alle anderen SQL Statements wären im Hauptprogramm, gäbe es (oder zumindest gab es) einen Compile Fehler.
Ich muss mal wieder prüfen, ob es inzwischen nicht ein PTF gibt, das auch eine Definition an einer anderen Stelle zulässt.
Birgitta
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By deni87991 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 14-08-06, 12:05
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By scoobydoo in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 25-11-05, 10:40
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