-
RRN von DDS Tabelle nach Insert
Hallo zusammen,
mal eine Frage an die SQL Profis
in eine DDS definierte Tabelle wird ein Satz eingefügt
PHP-Code:
insert into aTabHist select * from Tab where .........
Die Tabelle aTabHist hat keinen Unique Key.
Gibt es die Möglichkeit die eingefügte RRN des neuen Satzes zu ermitteln ?
Gruß
Michael
-
Es gäbe zwar die Möglichkeit das Ergebnis des INSERTs in ein SELECT zu packen ...
Code:
SELECT RRN(Tab1), Tab.* FROM FINAL TABLE (INSERT INTO TAB1 VALUES (...)) Tab1
allerdings erhalte ich hier immer nur den Wert 1.
Ich würde vorschlagen, ein hidden Feld hinzuzufügen, welches vom System automatisch hochgezählt wird.
Dadurch kannst du dir dann die ID mit der SQL Funktion IDENTITY_VAL_LOCAL () ermitteln.
Nachtrag: Hidden halt dann, wenn aus irgendwelchen gründen keine neue Spalte hinzugefügt werden darf.
-
HI,
wir können das Thema schliessen. Ich abe es auf die knvetionelle Art gelöst.
Danke für die Info's
-
RRN ist für SQL-Anwendungen die denkbar schlechteste Wahl.
Identity-Columns sind da allemal besser (früher auch mit Sequence).
-
Auch beim Zugriff über Relative Satz-Nr. mit SQL hat sich einiges geändert.
Seit Release 7.1 wird an dieser Stelle kein Table Scan ausgeführt, sondern der Zugriff erfolgt über einer sog. Values or RRN List.
Wenn man natürlich die Wahl hat und auf alle Fälle bei neuen (SQL) Tabellen (nicht DDS physicsche Dateien), sollte man grundsätzlich einen künstlichen eindeutigen Schlüssel integrieren und über diesen zugreifen bzw. diesen auch zum Verknüpfen mit abhängigen Tabellen verwenden.
Birgitta
Birgitta
-
SELECT RRN(Tab1), Tab.* FROM FINAL TABLE (INSERT INTO TAB1 VALUES (...)) Tab1
erklärt sich eigentlich von selbst, da ja die Final Table eine "temporäre" Tabelle ist und nicht auf die Zieltabelle verweist sondern auf das Ergebnis des Inserts.
Der Zugriff per RRN ist zwar inzwischen schnell, aber die RRN ist keine zuverässige Zugriffs-Id, insbesonders nicht zum Speichern in einer 2. Tabelle geeignt. So (eigentlich nicht mehr benötigte) Funktionen wie RGZPFM organisieren das nämlich neu.
-
In dem Zusammenhang INSERT u. FINAL TABLE eine Frage, ob unter V7R1 das mit Update bzw. Delete funktioniert?
Mein Test hat ergeben, dass es scheinbar nur bei INSERT mit FINAL TABLE bzw. NEW TABLE funktioniert. Lieg ich dabei richtig?
Code:
-- Insert (mehrere Zeilen + Rückgabe)
SELECT * FROM FINAL TABLE(
INSERT INTO kunden VALUES (DEFAULT, 'M44', 'MÜLLER', 'M', 'Herr', DEFAULT, DEFAULT, DEFAULT),
(DEFAULT, 'M45', 'MEYER', 'M', 'Herr', DEFAULT, DEFAULT, DEFAULT)
)
ORDER BY INPUT SEQUENCE;
-- UPDATE (m. V7R1 n. unterstützt)
SELECT * FROM OLD TABLE(
UPDATE kunden SET NAME = 'MICHAEL' WHERE IDKD=36
);
-- DELETE, gelöschte Sätze anzeigen (m. V7R1 n. unterstützt)
SELECT * FROM OLD TABLE(
DELETE FROM kunden WHERE IDKD = 34)
);
Mfg
-
FINAL TABLE ist nur für Insert zulässig
Hier ein Auszug aus der SQL Referenz:
FINAL TABLE
Specifies that the rows of the intermediate result table represent the set of rows
that are inserted by the SQL data change statement as they appear at the
completion of the data change statement. If there are AFTER INSERT triggers
or referential constraints that result in further changes to the inserted rows of
the table that is the target of the data change statement, an error is returned
Birgitta
-
Da du sowohl für Update als auch Delete die Daten doch kennen musst, macht die FINAL TABLE hier überhaupt keinen Sinn.
Was soll denn die FINAL TABLE z.B. beim Delete liefern, da die Daten dann doch weg sind?
-
Freilich, deswegen hatte ich ja noch ein konkretes Beispiel mit DELETE sowie eines mit UPDATE (s.o.) aufgelistet:
Code:
SELECT * FROM OLD TABLE(
DELETE FROM kunden WHERE IDKD = 34)
Meine Frage war eher dahingehend, ob OLD Table unterstützt wird oder ob das wieder nur ein Feature für die "richtige" DB2 oder zOs etc. ist?
Beispiel hier z.B.: http://it.toolbox.com/blogs/db2luw/s...statement-7239
-
Schau in die Doku des SQL (V7R3). Hier findest du NEW/FINAL TABLE nur beim Insert.
OLD TABLE findest du nur bei SQL-Triggerdefinitionen.
M.a.W: OLD TABLE beim Update/Delete ist nicht realisiert.
Vielleicht wirds ja irgendwann mit TRx/V8R1...
-
Zitat von Fuerchau
Schau in die Doku des SQL (V7R3). Hier findest du NEW/FINAL TABLE nur beim Insert.
Hatte ich gemacht, hoffte aber darauf, dass ich mich nur versehen habe und es doch möglich ist. Leider aber nicht.
Danke für die zwei schnellen Auskünfte!
Similar Threads
-
By Armin in forum NEWSboard Programmierung
Antworten: 17
Letzter Beitrag: 19-12-14, 12:07
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 10-10-14, 08:13
-
By bie-dro in forum NEWSboard Programmierung
Antworten: 18
Letzter Beitrag: 08-09-14, 20:26
-
By TARASIK in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 26-03-03, 10:03
-
By Robi in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 21-03-03, 09:16
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