-
SQL Insert ein Feld Hochzählen
Hallo,
ich mach folgenden SQL:
Insert into tabelle1 select * from tabelle2
nun hab ich in tabelle1 in der 1. spalte einen counter den ich in 10er schritten füllen muss.
Geht es in sql je zeile die ich einfüge eine zahl um 10 hochzuzählen ??
z.B.
10 Name1 Vorname1
20 Name2 VOrname2
30 Name3 Vorname3
....
Gruß
-
Hallo,
solltest Du noch nicht auf Release V5R3M0 sein, könntest Du einen Before Insert Trigger generieren. In diesem Trigger wird die letzte (höchste) laufende Nr. ermittelt und hochgezählt. Anstatt die letzte laufende Nr. direkt aus der Datei zu ermitteln, würde ich sie in einer Data Area speichern und jeweils aktualisieren. Eine Data Area hat zum einen den Vorteil, dass bei paralellen Inserts immer der letzte Wert ermittelt und fortgeschrieben wird. Zum anderen ist kein Datei-Zugriff erforderlich ist. Bei einem Dateizugriff wäre zu beachten, dass bei paralellen Anfragen oder je nach dem verwendeten Commitment Level nicht auf den letzten Wert zugegriffen werden kann und somit doppelte Werte ermittelt werden könnten.
Ab Release V5R3M0 hast Du die Möglichkeit ein Sequence Objekt (CREATE SEQUENCE) zu erstellen, bei dem Start und Endwert, sowie Schrittgröße angegeben werden können. Bei einem Sequence Objekt handelt es sich ebenfalls um eine Datenstruktur, in der die letzten Werte gespeichert werden. Um die nächste Sequence-Nr. zu ermitteln und in die Datei zufüllen ist kein Trigger erforderlich, sondern kann in Insert-Statement über NEXT VALUE FOR SequenceObject direkt angegeben werden.
Eine weitere Möglichkeit, sofern Du die Datei, in die die Sätze eingefügt werden ändern darfst, wäre eine Identity Column zu verwenden. Dies setzt allerdings voraus, dass die Datei/Tabelle mit SQL und nicht mit DDS erstellt wird. Identity columns müssen grundsätzlich numerisch sein (gepackt, gezont, Integer oder Float). Es kann ein Start- und Endwert, sowie eine Schrittgröße angegeben werden. Ausserdem kann angegeben werden, wie auf einen Überlauf reagiert werden soll. Eine Identity Column garantiert noch keinen Unique Key, d.h. es muss zusätzlich eine logische Datei oder ein SQL-Index mit Unique Key über diese Spalte gelegt werden. Beim Einfügen in eine solche Datei wird der Wert für diese Spalte automatisch ermittelt und in den Datensatz geschrieben. Es ist keine zusätzliche Aktion notwendig.
PHP-Code:
CREATE TABLE MySchema/MyTable (
MyFld1 DECIMAL(9, 0)
GENERATED ALWAYS AS IDENTITY (
START WITH 10 INCREMENT BY 10
NO MINVALUE NO MAXVALUE
CYCLE ORDER
CACHE 20 ),
MyFld2 ....
Similar Threads
-
By Robi in forum IBM i Hauptforum
Antworten: 20
Letzter Beitrag: 16-03-09, 10:32
-
By svente in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 23-01-07, 09:49
-
By woki in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 31-10-06, 10:21
-
By rr2001 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 11-07-06, 14:10
-
By Deficiency in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 13-01-06, 09:00
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