Hvordan lage en begrensning Deferrable i Oracle

Hvordan lage en begrensning Deferrable i Oracle


Begrensninger er utformet for å forebygge ulykker i databehandling og for å bevare integriteten til data. I enkelte tilfeller kan det imidlertid være nødvendig å utsette begrensninger slik at de ikke faktisk håndheve deres regler til en spesifikk betingelse er oppfylt. For eksempel er det mulig å utsette reglene for en begrensning for å aktivere bare når "commit" har blitt forespurt.

Bruksanvisning

1 Lag to tabeller i sqlplus å demonstrere deferrable begrensninger som følger:

CREATE TABLE test (

test_id INTEGER PRIMARY KEY,

foreign_id INTEGER NOT NULL);

CREATE TABLE test2 (

test2_id INTEGER PRIMARY KEY,

foreign2_id INTEGER NOT NULL

);

2 Alter tabellene i sqlplus å legge fremmednøkkelbegrensninger til hverandre som følger:

ALTER TABLE test LEGG CONSTRAINT test2REF

FOREIGN KEY (foreign_ID) REFERANSER test2 (test2_ID)

INITIALLY UTSATT DEFERRABLE;

ALTER TABLE test2 LEGG CONSTRAINT testREF

FOREIGN KEY (foreign2_ID) Referanser test (test_ID)

INITIALLY UTSATT DEFERRABLE;

3 Sett poster i begge tabellene i sqlplus. Dette viser at med en deferrable begrensning, kan rader legges til tross for de utenlandske viktige begrensninger:

INSERT INTO testverdier (1, 2);

INSERT INTO test2 VALUES (2, 1);

4 Forplikte informasjonen på sqlplus kommandoen med:

Begå;

Dette vil fullføre operasjonen og rader vil bli lagt inn i begge tabellene.

5 Demonstrere hvordan det ville mislykkes ved å kjøre alle kommandoene på nytt i én operasjon, men uten utsatt begrensningen. På sqlplus kommandoen skriv:

- Først slette tabellene.

Drop table test CASCADE begrensninger;

Drop bord test2 CASCADE begrensninger;

- Nå skriver alle tidligere kommandoer, men uten de deferrable begrensninger som følger:

CREATE TABLE test (

test_id INTEGER PRIMARY KEY,

foreign_id INTEGER NOT NULL

);

CREATE TABLE test2 (

test2_id INTEGER PRIMARY KEY,

foreign2_id INTEGER NOT NULL

);

ALTER TABLE test LEGG CONSTRAINT test2REF

FOREIGN KEY (foreign_id) REFERANSER test2 (test2_id);

ALTER TABLE test2 LEGG CONSTRAINT testREF

FOREIGN KEY (foreign2_id) Referanser test (test_id);

INSERT INTO testverdier (1, 2);

INSERT INTO test2 VALUES (2, 1);

Denne versjonen av skriptet vil mislykkes som begrensningene ikke har blitt utsatt avventer en "COMMIT" -kommandoen.

Hint

  • Kommandoer med "-" før dem er kommentarer i koden.