Ir ao conteúdo
  • Cadastre-se

Oracle Problema com um gatilho


Posts recomendados

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.

Link para o comentário
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;

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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...