Você está na página 1de 12

Assertivas (Assertions)

Assertivas são especificadas em um banco de


dados para se garantir restrições semânticas
(regras de negócio / regras de integridade).

A condição definida em uma assertiva deverá


ser verdadeira em todos os estados do banco
de dados.

1
CREATE ASSERTION

CREATE ASSERTION RESTRICAO_SALARIO


CHECK (NOT EXISTS
(SELECT *
FROM EMPREGADO E, EMPREGADO M, DEPARTAMENTO D
WHERE E.SALARIO > M.SALARIO AND
E.DNO = D.DNUMERO AND
D.GERSSN = M.SSN) );

Esta assertiva garante que o salário de um


empregado não pode ser maior do que o salário do
gerente do departamento em que ele trabalha.

2
CREATE ASSERTION

CREATE ASSERTION INTEGRIDADE_CHAVE_COM_NULOS


CHECK ( (SELECT COUNT(DISTINCT X)
FROM R
WHERE X IS NOT NULL ) =
(SELECT COUNT(*)
FROM R
WHERE X IS NOT NULL ) );

Seja X uma chave de R que admite o valor nulo.


Esta assertiva garante a integridade da chave, mesmo que
existam em R várias tuplas com o valor de X igual a nulo.

3
Gatilhos (Triggers)
Triggers são regras que especificam ações
que devem ser executadas caso um evento
específico aconteça e uma determinada
condição seja satisfeita.

Formato E-C-A (evento-condição-ação)

Permitem a garantia de regras semânticas e


auxiliam no controle de consitência de dados
redundantes.

Caracterizam os bancos de dados ativos.


4
CREATE TRIGGER

Um conjunto de triggers será definido para garantir


a consistência do atributo TOTAL_SAL, que é
redundante.

5
CREATE TRIGGER

CREATE TRIGGER TOTALSAL1


AFTER INSERT ON EMPREGADO
FOR EACH ROW
WHEN (NEW.DNO IS NOT NULL)
UPDATE DEPARTAMENTO
SET TOTAL_SAL = TOTAL_SAL + NEW.SALARIO
WHERE DNO = NEW.DNO;

6
CREATE TRIGGER

CREATE TRIGGER TOTALSAL2


AFTER UPDATE OF SALARIO ON EMPREGADO
FOR EACH ROW
WHEN (NEW.DNO IS NOT NULL)
UPDATE DEPARTAMENTO
SET TOTAL_SAL = TOTAL_SAL + NEW.SALARIO - OLD.SALARIO
WHERE DNO = NEW.DNO;

7
CREATE TRIGGER

8
CREATE TRIGGER

9
CREATE TRIGGER

CREATE TRIGGER INFORM_SUPERVISOR1


BEFORE INSERT OR UPDATE OF SALARIO, SUPERVISOR_SSN ON EMPREGADO
FOR EACH ROW
WHEN
(NEW.SALARIO > (SELECT SALARIO
FROM EMPREGADO
WHERE SSN = NEW.SUPERVISOR_SSN))
INFORM_SUPERVISOR(NEW.SUPERVISOR_SSN, NEW.SSN);

Uma ação será executada antes do salário de um


empregado se tornar maior do que o salário do
supervisor dele.

10
CREATE TRIGGER

<evento ativador>

A cláusula FOR EACH ROW indica que se trata de um


trigger de linha (ou de tupla). Sua omissão especifica um
trigger de statement (ou de declaração). No primeiro caso,
a condição e a ação serão ativadas para cada tupla
envolvida no evento. No segundo, apenas uma vez.
11
CREATE TRIGGER

RAISE_APPLICATION_ERROR (Num_Erro, Msg_Erro);

Interrompe a execução de um bloco de comandos SQL.


Num_Erro é um número entre -20000 e -20999
Msg_Erro é um texto livre especificado pelo desenvolvedor

O programa deverá consultar as seguintes variáveis:

SQLCODE – conterá o número do erro


SQLERRM – conterá a mensagem associada ao erro

12

Você também pode gostar