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!