ajuda trigger !

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
beAst
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 05 Nov 2013 3:27 pm

Galera é o seguinte sou novo na utilização do Oracle e estou vendo ele na faculdade, faltei na aula de trigger e não conseguindo solucionar o seguinte problema:

Desenvolva em PL/SQL um controle para evitar que se cadastre dois clientes com a mesma titularidade em uma
conta, ou seja, não pode ter na mesma conta dois clientes com a mesma titularidade.

Selecionar tudo

CREATE OR REPLACE TRIGGER redundancia_titularidade 
BEFORE INSERT OR UPDATE ON contrato_conta
FOR EACH ROW
BEGIN
  IF titularidade = :NEW.titularidade THEN
  RAISE_APPLICATION_ERROR(-20500, 'Essa conta já possui essa titularidade');
END IF;
END redundancia_titularidade ;
Na verdade não sei nada :/
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

seria assim:

IF :OLD.titularidade = :NEW.titularidade THEN
RAISE_APPLICATION_ERROR(-20500, 'Essa conta já possui essa titularidade');
END IF;
beAst
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 05 Nov 2013 3:27 pm

E esse ?

Selecionar tudo

CREATE OR REPLACE TRIGGER redundancia_titularidade 
BEFORE INSERT OR UPDATE ON contrato_conta
FOR EACH ROW 
BEGIN
  --validando
  IF :NEW.titularidade <> :OLD.titularidade AND :NEW.nr_conta = :OLD.nr_conta THEN
    RAISE_APPLICATION_ERROR (-20006, 'Já possui titularidade');
  END IF;
END;
O que tem de errado ?
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Veja,
acredito que se teu objetivo é verificar se já existe a mesma titularidade cadastrada então faça:

Selecionar tudo

DECLARE
 v_existe number;

Begin

   Select 1 into v_existe from tabela 
     where titularidade = :NEW.titularidade
       and nro_conta    = :NEW.nro_conta;
   Exception
      WHEN NO_DATA_FOUND THEN
           v_existe :=0;
      WHEN OTHERS THEN
           v_existe :=0;
End;

IF v_existe = 1 Then
    RAISE_APPLICATION_ERROR (-20006, 'Já possui titularidade');
END IF;
Responder
  • Informação