PDA

View Full Version : Anfänger Frage - Autowert?



Alex79
26-07-05, 16:08
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

Fuerchau
26-07-05, 16:11
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.

Miggi
27-07-05, 14:21
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.

COS
28-07-05, 14:43
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

Fuerchau
28-07-05, 15:45
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).