View Full Version : Anfänger Frage - Autowert?
Hallo An alle,
ich bin neu im System AS400. Eine Frage hab ich.
Gibt es die Möglichkeit in deiner Tabelle einem Feld die Funktion eines Autowertes zu geben?
Zum Beispiel: die Art einer laufenden Nummer
oder gibt es noch einen anderen Weg?
Grüsse
Alex
Einen Autowert wie in MS-Access/SQL-Server gibt es auf der AS/400 nicht.
Man kann sich set neuestem eine Auto-ID (allerdings 40-Stellig) generieren lassen.
Möchte man einen Autowert als einfache Zahl geht dies nur mittels BEFORE-INSERT-Trigger.
Hierzu findest du mehrere Beispiele im Forum.
Warum so schrierig,
Jede DB-Datei hat eine relative Satznummer (rrn - relativ record Number), die von der AS/400-Datenbank automatisch vergeben wird, egal ob die Datei geschlüsselt ist oder nicht. Warum verwendest Du nicht diese rrn.
In SQL:
select rrn(a) from lib/table a
In RPG kann man bei Dateidefinition ohne Key direkt auf diese releatve Satznummer zugreifen. Beim sequentiellen Lesen wird diese in spezifischen Dateiinformationsstruktur zurückgeliefert.
Hallo An alle,
ich bin neu im System AS400. Eine Frage hab ich.
Gibt es die Möglichkeit in deiner Tabelle einem Feld die Funktion eines Autowertes zu geben?
Zum Beispiel: die Art einer laufenden Nummer
oder gibt es noch einen anderen Weg?
Grüsse
Alex
doch, es wird nicht nur eine 40-stellige ID geliefert,
dieses Beispiel erzeugt 9-stellige ID's (Integer)
=============================================
folgende Felder in der Tabelle werden erzeugt:
Feld Art Länge
OID INTEGER 9
NAME CHARACTER 40
CREATE TABLE TESTCOLL/TAB4711
(OID integer GENERATED always AS IDENTITY
(START WITH 1 , INCREMENT BY 1) ,
NAME CHAR (40 ) )
;
INSERT INTO TESTCOLL/TAB4711
(NAME) VALUES('TEST_TEST')
;
INSERT INTO TESTCOLL/TAB4711
(NAME) VALUES('TEST2_TEST2')
;
select * from TESTCOLL/TAB4711
;
OID NAME .
1 TEST_TEST
2 TEST2_TEST2
Die RRN(*) sollte per SQL nicht verwendet werden, da diese immer einen Tablescan erzwingt.
Ausserdem ändert sich diese bei z.B. einem RGZPFM bzw. durch REUSEDLT(*YES) wird die gleiche RRN wieder verwendet.
Damit bietet RRN nur eine temporäre und keine statische Eindeutigket (z.B. zur Verwendung von ForeignKey's, Constraint).