[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Dec 2004
    Beiträge
    178

    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ß

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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(90)
             
    GENERATED ALWAYS AS IDENTITY (
             
    START WITH 10 INCREMENT BY 10
             NO MINVALUE NO MAXVALUE
             CYCLE ORDER
             CACHE 20 
    ),
       
    MyFld2 .... 
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL Insert in schleife
    By Robi in forum IBM i Hauptforum
    Antworten: 20
    Letzter Beitrag: 16-03-09, 10:32
  2. per SQL Feld ändern...
    By svente in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 23-01-07, 09:49
  3. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  4. sql num. Feld formatieren
    By rr2001 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-07-06, 14:10
  5. SQL Insert: Zeichenbegrenzung???
    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
  •