1. Introdução
No SGBD Oracle, a instrução ALTER TABLE pode ser utilizada com diferentes finalidades. Talvez a mais importante delas seja a modificação das propriedades de uma coluna. Além de modificar propriedades como o tipo e o tamanho da coluna, outra coisa bastante interessante que pode ser feita é associar uma restrição (constraint) para a coluna.
As restrições mais comumente utilizadas são chave primária, chave estrangeira e not null. No entanto, existe outro tipo muito útil que nem sempre é lembrado pelos desenvolvedores: a restrição check. Uma restrição check define uma condição que deverá ser satisfeita sempre que um valor para a coluna for inserido ou modificado. Por exemplo: podemos associar uma restrição check àcoluna sexo para que ela aceite apenas os valores “F” e “M”. A seção a seguir mostra como utilizar a instrução ALTER TABLE para definir constraints do tipo check.
2. Criando Restrições do Tipo Check
Considere uma tabela chamada T_PESSOA, cujo script de criação é mostrado na Listagem 1.
Listagem 1: Tabela T_PESSOA
CREATE TABLE T_PESSOA(
COD_PESSOA NUMBER(7) PRIMARY KEY,
UF CHAR(2),
IDADE NUMBER(2),
STATUS NUMBER(1)
)
A Listagem 2 mostra o script para criar uma restrição check que faz com que o campo UF só aceite estados da região Sudeste. O formato da instrulção é o seguinte: primeiro você deve escrever a instrução ALTER TABLE ADD CONSTRAINT seguida do nome que você deseja para a restrição (no exemplo, o nome escolhido foi “ck_uf”). Depois você escreve a palavra CHECK e define a regra para a restrição entre parênteses. No exemplo da listagem 2, a regra é: o campo “uf” só deve aceitar valores que façam parte do conjunto (‘RJ’, ‘SP’, ‘MG’, ‘ES’).
Listagem 2: Restrição CHECK para o campo UF
ALTER TABLE T_PESSOA
ADD CONSTRAINT ck_uf
CHECK (uf IN (‘RJ’,’SP’,’MG’,’ES’));
O exemplo da Listagem 3 mostra o script para criar uma restrição check sobre um campo numérico, o campo “idade”. O nome da constraint é “ck_idade” e ela define como regra, que o campo idade só pode aceitar valores iguais ou maiores do que 18.
Listagem 3: Restrição CHECK para o campo IDADE
ALTER TABLE T_PESSOA
ADD CONSTRAINT ck_idade
CHECK (idade > 17);
Na verdade, o Oracle é tão flexível, que permite até mesmo a criação de restrições envolvendo mais de uma coluna, como mostra a Listagem 4.
Listagem 4: Restrição CHECK sobre dois campos
ALTER TABLE T_PESSOA
ADD CONSTRAINT ck_composta
CHECK (status > 0 AND uf=’RJ’);
Para apagar uma constraint, é necessário utilizar a instrução ALTER TABLE com a cláusula DROP CONSTRAINT (Listagem 5).
Listagem 5: Excluindo uma constraint
ALTER TABLE T_PESSOA
DROP CONSTRAINT ck_composta;
Neste artigo, novamente examinamos a importância do comando ALTER TABLE, que pode ser utilizado com vários objetivos distintos no Oracle. Dessa vez, mostramos como podemos utilizá-lo para adicionar restrições do tipo CHECK em tabelas. Até a próxima!