|
|
OracleLEZIONI - VINCOLI DI CONTROLLO SUI DATI I constraint (o vincoli), sono delle regole che vengono stabilite all'interno di una tabella Oracle che servono ad evitare che l'utente possa inserire dati non conformi ad alcune regole. Queste regole possono preservare l'inserimento dei dati o l'integrità referenziale tra le tabelle. Possono essere dichiarati sia in fase di creazione tabella ( Durante la dichiarazione del vincolo possiamo associargli un nome (usando la clausola Nota: In tutti gli esempi riportati in questo capitolo usiamo l'utente "myself" creato nelle lezioni precedenti. Constraint NOT NULLPuò essere definito esclusivamente su una singola colonna della tabella. La sua funzione è quella di evitare che l'utente possa inserire valori nulli ( Sinstassi del vincolo NOT NULL <nome colonna> <tipo> CONSTRAINT <nome vincolo> NOT NULL Sinstassi del vincolo NOT NULL (anonimo) <nome colonna> <tipo> NOT NULL Per esempio creiamo una tabella denominata "myTableNull" avente due colonne, entrambe " SQL> CREATE TABLE myTableNull 2 ( 3 Cognome VARCHAR2(15) CONSTRAINT nn_myTableNull_Cognome NOT NULL, 4 Nome VARCHAR2(15) CONSTRAINT nn_myTableNull_Nome NOT NULL 5 ); Inseriamo ora in tabella due nuove righe che violano i constraint impostati. SQL> INSERT INTO myTableNull VALUES (NULL, 'Sergio'); SQL> INSERT INTO myTableNull VALUES ('Napolitano', NULL); In entrambi gli esempi Oracle solleva un errore Se volessimo successivamente permettere, nella stessa tabella, l'inserimento di valori NULL per la colonna Nome allora scriveremmo: SQL> ALTER TABLE myTableNull MODIFY Nome NULL; Stavolta l'inserimento con del valore Constraint CHECKQuesto vincolo effettua un controllo sui dati e ne evita l'inserimento se questi non rispettino una determinata condizione, imposta dal creatore della tabella. Sintassi del vincolo CHECK CONSTRAINT <nome> CHECK <condizione> Per esempio creiamo una tabella denominata "myTableCheck" e imposteremo un constraint SQL> CREATE TABLE myTableCheck
2 (
3 Cognome VARCHAR2(15),
4 Stipendio NUMBER (6,2),
5 CONSTRAINT ck_myTableCheck_Stipendio CHECK (Stipendio > 980.50)
6 );
Inseriamo una riga nella tabella myTableCheck che viola la condizione imposta dal constraint. SQL> INSERT INTO myTableCheck VALUES ('Rossi', 754.40); Oracle solleva l'errore ORA-02290 riportando anche il nome del constraint violato. Il seguente comando, invece, va a buon fine. SQL> INSERT INTO myTableCheck VALUES ('Verdi', 1000.50);Facciamo un altro esempio e creiamo una tabella denominata "Prova" con un vincolo SQL> CREATE TABLE Prova
2 (
3 Nominativo VARCHAR2(15),
4 Salario NUMBER(6,2),
5 Bonus NUMBER(6,2),
6 CONSTRAINT ck_Prova_SalBon CHECK (Bonus < Salario)
7 );
Se inseriamo nella tabella appena creata una riga che violi il constraint SQL> INSERT INTO prova VALUES ('Verdi', 1000.50, 2000); |