DB2 - Exemplos simples - CHECK



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

DB2 - Exemplos simples - CHECK

A check constraint is a rule that specifies what values are allowed to be stored in a table.
For example, you can specify that the price of a book must be positive.
Uma restrição de verificação é uma regra que especifica quais valores podem ser armazenados em uma tabela.
Por exemplo, você pode especificar que o preço de um livro deve ser positivo.

To define a check constraint for a column, you use the following syntax:
Para definir uma restrição de verificação para uma coluna, você usa a seguinte sintaxe:

    CREATE TABLE table_name(
	 ...
	        column_name type CHECK(Boolean_expression),
    ...
    );

When you insert or update value into the column_name, Db2 evaluates the Boolean_expression of the check constraint.
If the Boolean_expression returns false, Db2 will reject the operation; otherwise, Db2 will allow.
Sometimes, you may want to check values across columns of a table.
To do this, you use the following syntax:

Quando você insere ou atualiza o valor no column_name, o Db2 avalia o Boolean_expressionda restrição de verificação.
Se o Boolean_expressionretorno for falso, o Db2 rejeitará a operação; caso contrário, o Db2 permitirá.
Às vezes, você pode querer verificar os valores nas colunas de uma tabela.
Para fazer isso, você usa a seguinte sintaxe:

   CREATE TABLE table_name(
          column_name1 type,
          column_name2 type,
	...,
          CHECK(Boolean_expression)
   );

The Boolean_expression in this syntax may include multiple columns of the table.
> Note that the Boolean expression specified in the CHECK constraint only can include the columns within the same table.
It cannot have columns from other tables.
To add a check constraint to a table, you use the following syntax:

O Boolean_expression nesta sintaxe pode incluir várias colunas da tabela.
Observe que a expressão booleana especificada na CHECK restrição pode incluir apenas as colunas da mesma tabela.
Não pode ter colunas de outras tabelas.
Para adicionar uma restrição de verificação a uma tabela, você usa a seguinte sintaxe:

   ALTER TABLE table_name
         ADD CONSTRAINT constraint_name
         CHECK(Boolean_expression);

To remove a check constraint from a table, you use this syntax:
Para remover uma restrição de verificação de uma tabela, você usa esta sintaxe:

   ALTER TABLE table_name
         DROP CONSTRAINT constraint_name;

Db2 CHECK constraint examples - CHECK Exemplos de restrição Db2

1. Creating a CHECK constraint when creating the table example - Criação de uma restrição CHECK ao criar o exemplo de tabela

First, create the book_prices table that stores the book prices:
Primeiro, crie a tabela book_prices que armazena os preços dos livros:

   CREATE TABLE book_prices(
          book_id INT NOT NULL,
          valid_from DATE NOT NULL,
          price DEC(10,2) CHECK(price > 0),
          PRIMARY KEY(book_ID, valid_from),
          FOREIGN KEY(book_id) 
                  REFERENCES books(book_id)
                          ON UPDATE RESTRICT
                          ON DELETE CASCADE
   );

In this example, the price column has a check constraint that allows only positive price to be inserted or updated to the column.
Second, insert a new row into the books_price table whose price is positive.
Neste exemplo, a coluna price possui uma restrição de verificação que permite que apenas o preço positivo seja inserido ou atualizado na coluna.
Em segundo lugar, insira uma nova linha na books_pricetabela cujo preço seja positivo.

    INSERT INTO 
           book_prices(book_id, valid_from, price)
    VALUES
          (1, '2019-05-06',29.99);

The statement works because the price is positive.
Third, attempt to insert a zero price into the book_prices table:
A afirmação funciona porque o preço é positivo.
Terceiro, tente inserir um preço zero na tabela book_prices:


    INSERT INTO 
           book_prices(book_id, valid_from, price)
    VALUES
          (2, '2019-05-06',0);

Db2 issued the following error because the price does not pass the check:
O Db2 emitiu o seguinte erro porque o preço não passou na verificação:

    SQL0545N  The requested operation is not allowed because a row does not satisfy
    the check constraint "DB2ADMIN.BOOK_PRICES.SQL190605115402090".

Note that SQL190605115402090 is the constraint name generated automatically by Db2.
Observe que SQL190605115402090 é o nome da restrição gerado automaticamente pelo Db2.

2) Adding a CHECK constraint to an existing table example - Adicionar uma restrição CHECK a um exemplo de tabela existente

First, add a new column named to the book_prices table using the ALTER TABLE ADD COLUMN statement:
Primeiro, adicione uma nova coluna nomeada à tabela book_prices usando a instrução ALTER TABLE ADD COLUMN:

    ALTER TABLE book_prices
          ADD COLUMN cost DEC(10,2);

Second, add a check constraint to make sure that the cost is greater than zero and the price is always greater than or equal to the cost:
Em segundo lugar, adicione uma restrição de verificação para garantir que o custo seja maior que zero e que o preço seja sempre maior ou igual ao custo:

    ALTER TABLE book_prices
          ADD CONSTRAINT cost_check 
          CHECK(cost > 0 AND price >= cost);

Third, insert a row into the book_prices table:
Terceiro, insira uma linha na tabela book_prices:

    INSERT INTO 
           book_prices(book_id, valid_from, cost, price)
    VALUES
          (3, '2019-05-15',15.99, 20.99);

The statement works because both cost and price pass the condition in the check constraint.
Fourth, insert a row whose cost is greater than the price:
A instrução funciona porque o custo e o preço passam pela condição na restrição de verificação.
Quarto, insira uma linha cujo custo seja maior que o preço:

    INSERT INTO 
           book_prices(book_id, valid_from, cost, price)
    VALUES
          (4, '2019-05-15',16.99, 12.99);

Db2 issued the following error:
Db2 emitiu o seguinte erro:

   SQL0545N  The requested operation is not allowed because a row does not satisfy
   the check constraint "DB2ADMIN.BOOK_PRICES.COST_CHECK".

Fifth, insert a row whose cost is NULL:
Quinto, insira uma linha cujo custo seja NULL:

    INSERT INTO 
           book_prices(book_id, valid_from, cost, price)
    VALUES
          (5, '2019-05-15',NULL, 13.99);

It worked because the condition cost > 0 AND price >= cost evaluates to unknown when the cost is NULL.
To avoid this kind of bypassing the check constraint, you need to use the NOT NULL constraint for the cost column.
Funcionou porque a condição cost > 0 AND price >= costa valia unknown quando o custo é NULL.
Para evitar esse tipo de desvio da restrição de verificação, você precisa usar a restrição NOT NULL para a coluna cost.

3) Removing a CHECK constraint example - Exemplo removendo uma restrição de CHECK

The following statement removes the cost_check check constraint from the the book_prices table:
A instrução a seguir remove a restrição de verificação cost_check da tabela book_prices:

    ALTER TABLE book_prices
          DROP CONSTRAINT cost_check;