Come fare un vincolo Deferrable in Oracle

June 25

Come fare un vincolo Deferrable in Oracle


I vincoli sono progettati per prevenire gli incidenti nella gestione dei dati e per preservare l'integrità dei dati. In alcuni casi, tuttavia, può essere necessario differire vincoli in modo che in realtà non rispettare le loro regole finché una condizione specifica viene soddisfatta. Ad esempio, è possibile rinviare le regole di un vincolo per attivare solo quando un "commit" richiesto.

istruzione

1 Creare due tabelle in SQLPlus per dimostrare vincoli differibili come segue:

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 Modificare le tabelle in SQLPlus aggiungere vincoli di chiave esterna tra loro come segue:

ALTER TABLE test Aggiungi vincolo test2REF

FOREIGN KEY (foreign_ID) RIFERIMENTI test2 (test2_ID)

INIZIALMENTE DEFERRED DEFERRABLE;

ALTER TABLE test2 Aggiungi vincolo testREF

FOREIGN KEY (foreign2_ID) RIFERIMENTI prova (test_ID)

INIZIALMENTE DEFERRED DEFERRABLE;

3 Inserire record in entrambe le tabelle in SQLPlus. Questo dimostra che con un vincolo differibile, le righe possono essere aggiunti, nonostante i vincoli di chiave esterna:

INSERT INTO test VALUES (1, 2);

INSERT INTO VALUES test2 (2, 1);

4 Commit le informazioni al comando SQLPlus con:

Commettere;

Questo completerà l'operazione e le file verrà aggiunto a entrambe le tabelle.

5 Dimostrare come sarebbe sicuro eseguendo nuovamente tutti i comandi in una sola operazione, ma senza il vincolo differito. Al comando SQLPlus digitare:

- In primo luogo eliminare le tabelle.

DROP TABLE vincoli di prova CASCADE;

DROP TABLE test2 vincoli CASCADE;

- Ora inserire tutti i comandi precedenti, ma senza i vincoli differibili come segue:

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 Aggiungi vincolo test2REF

FOREIGN KEY (foreign_id) RIFERIMENTI test2 (test2_id);

ALTER TABLE test2 Aggiungi vincolo testREF

FOREIGN KEY prova (foreign2_id) RIFERIMENTI (test_id);

INSERT INTO test VALUES (1, 2);

INSERT INTO VALUES test2 (2, 1);

Questa versione dello script fallirà come i vincoli non sono stati differiti in attesa di un comando "commit".

Consigli e avvertenze

  • Comandi con "-" prima di loro sono commenti nel codice.