Ir ao conteúdo
  • Cadastre-se
Visitante

Oracle Problema com um gatilho

Posts recomendados

Visitante

Minha tabela:

 

create table prevenda(
codprevenda number not null primary key,
quantidade number(2) not null,
nota_fiscal number null,
venda number null,
produto number not null,
constraint fk_prevenda_notafiscal foreign key (nota_fiscal) references nota_fiscal (num),
constraint fk_prevenda_venda foreign key (venda) references venda (codvenda),
constraint fk_prevenda_produto foreign key (produto) references produto (codprod)
);

 

Meu gatilho:

 

create or replace trigger prevenda_insert before insert on prevenda for each row
begin
if :new.nota_fiscal = null and :new.venda = null then
raise_application_error(-20500, 'Entre nota fiscal e venda, no mínimo 1 campo deve ser preenchido!');
elsif :new.nota_fiscal <> null and :new.venda <> null then
raise_application_error(-20500, 'Entre nota fiscal e venda, no máximo 1 campo deve ser preenchido!');
end if;
end;

 

Eu tento fazer:

 

insert into prevenda values (1, 1, null, null, 1);

 

E o banco insere os dados com os dois valores null que eu não quero que insira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@EduardoMQS A sintaxe parece estar errada, tenta assim:

 

create or replace trigger prevenda_insert 
before insert 
    on prevenda

    for each row
    
begin


if (:new.nota_fiscal = null and :new.venda = null) then
    raise_application_error(-20500, 'entre nota fiscal e venda, no mínimo 1 campo deve ser preenchido!');
end if;
    
if (:new.nota_fiscal <> null and :new.venda <> null) then
    raise_application_error(-20500, 'entre nota fiscal e venda, no máximo 1 campo deve ser preenchido!');
end if;


end;

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  •    40
    Visitante

    @ederlap

     

    Meu gatilho agora:

     

    create or replace trigger prevenda_insert before insert on prevenda for each row
    begin
    if ((:new.nota_fiscal = null) and (:new.venda = null)) then
    raise_application_error(-20500, 'Entre nota fiscal e venda, no mínimo 1 campo deve ser preenchido!');
    elsif ((:new.nota_fiscal <> null) and (:new.venda <> null)) then
    raise_application_error(-20500, 'Entre nota fiscal e venda, no máximo 1 campo deve ser preenchido!');
    end if;
    end;

     

    E continuei com o mesmo problema.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Criar uma conta

    Crie uma nova conta em nossa comunidade. É fácil!

    Crie uma nova conta

    Entrar

    Já tem uma conta? Faça o login.

    Entrar agora





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×
    ×
    • Criar novo...

    Aprenda a ler resistores e capacitores

    EBOOK GRÁTIS!

    CLIQUE AQUI E BAIXE AGORA MESMO!