Spalte mit fortlaufender Nummer erzeugen

25. Juni 2009 von Lothar
    Aufgabenstellung:

Für eine bestehende Tabelle in Oracle soll eine neue Spalte hinzugefügt werden, die eine eindeutige, fortlaufende Nummer beinhaltet.

    Lösungsansatz:

Es bieten sich je nach Größe, Umfang der Tabelle verschiedene Lösungsansätze an. Im folgenden möchte ich eine Lösung zeigen, die mittels einer Sequenz und eines Triggers automatisch beim Einfügen von neuen Zeilen einen Zähler hochzählt und diese Werte in die neue Spalte einfügt. Da ich für dieses Lösungsansatz die komplette Tabelle kopiere, eigent sich dieses Verfahren nicht unbedingt für sehr grosse Tabellen im GByte Bereich.

    Durchführung:

1. Die neue Tabelle „tab_bck“ als kopie der Tabelle „tab_org“ erstellen:

create table tab_bck as select * from tab_org;

2. Den Inhalt der neu erstellten Tabelle löschen, da alle Zeilen später neu, per insert eingefügt werden sollen:

truncate table tab_bck;

3. In der neu erstellten tabelle eine neue Spalte vom Typ number einfügen:

ALTER TABLE tab_bck ADD („MYID“ NUMBER);

4. Den primary key für die Eindeutigkeit einzufügenden Zahlenwerte einstellen:

ALTER TABLE tab_bck ADD CONSTRAINT ora_bck_pk PRIMARY KEY( „MYID“ ) ENABLE;

5. Eine sequence erzeugen, die den Startwert vorgibt, ggf. zusätzliche Parameter definieren:

CREATE SEQUENCE MY_SEQ START WITH 1000;

6. Den Trigger anlegen, der bei jedem insert in die Tabelle org_bck die eindeuten Zalenwert in die Spalte myid einträgt.

create or replace trigger my_auto_insert
before insert on tab_bck
for each row
begin
select my_seq.nextval into :new.myid from dual;
end;
/

7. Alle Spalten der Tabelle „tab_org“ auslesen in die Tabelle „tab_bck“ schreiben, gleichzeitig wird der eindeutige Zahlenwert automatisch eingefügt:

select spalte1, spalte2, spalte3 from tab_org insert into tab_bck (spalte1, spalte2, spalte3 );

export unter Linux/Unix

6. Mai 2009 von Lothar

einfaches Beispiel für einen user export unter Linux/Unix:

environment setzten:

export ORACLE_HOME=/oracle/product/92
export ORACLE_SID=MAX
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15

Bei Verwendung einer Parmeterdatei heißt der export Auffruf z.B.

exp system/password parfile=MAX_schema_exp.par

Der Inhalt eines Parameterfile für den export zweier schematas könnte so ausschauen:

file=/DB/MAX/data/MAX_schema_exp.dmp
log=/DB/MAX/data/MAX_schema_exp.log
buffer=3000000
consistent=y
feedback=20000
owner=(schema1, schema2)

export unter Windows

6. Mai 2009 von Lothar

einfaches Beispiel für einen user export unter Windows, die Textdatei als *.bat abspeichern und ausführen…

@echo on
SET LOG=APPL_schema_exp.log
SET NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
time /T >> %LOG%
exp user/password@SID file=APPL_schema_exp.dmp log=%LOG% consistent=y BUFFER=3000000 FEEDBACK=20000 STATISTICS=NONE
time /T >> %LOG%
@echo FERTIG !!!
pause