- Este tópico contém 20 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 2 meses atrás por
Rodrigo Mesquita.
-
AutorPosts
-
19 de outubro de 2009 às 9:27 pm #90285
Anakim
ParticipanteTeria como usar um valor, que está sendo inserido na tabela, em um check constraint?
19 de outubro de 2009 às 9:39 pm #90286Rodrigo Mesquita
Participantevoce pode tratar isso em um trigger before insert ou before update
19 de outubro de 2009 às 9:41 pm #90287Anakim
ParticipanteIsso eu sei, só queria saber se tem como criar isso em um check. 😉
19 de outubro de 2009 às 9:49 pm #90288Rodrigo Mesquita
ParticipanteNão sei exatamente como voce quer, mais neste exemplo abaixo eu evito que um valor seja igual ao de outra coluna na mesma tabela.
create table TESTE
(
EXEMPLO1 VARCHAR2(100),
EXEMPLO2 VARCHAR2(100)
);alter table TESTE
add constraint CHECK1
check (exemplo1 exemplo2);19 de outubro de 2009 às 9:54 pm #90289Anakim
ParticipanteO que eu na verdade quero saber é se tem como pegar este valor que está sendo inserido e fazer um select nele, igual a uma trigger.
19 de outubro de 2009 às 10:12 pm #90290Anakim
ParticipantePor exemplo:
A estrutura da tabela é esta: id, name, id_fk.
Vou incluir os dados (1, test, 2).
Tem como eu pegar o id_fk, que neste caso é 2 e fazer um count por ele dentro de um check?19 de outubro de 2009 às 10:36 pm #90291Rodrigo Mesquita
ParticipanteAté que eu saiba o oracle não permite subquery dentro de check constraints
19 de outubro de 2009 às 10:48 pm #90292Anakim
ParticipanteEntendi…
Resolvi fazer em trigger. Valeu pela ajuda galera.
Alguém poderia me mandar um trigger de exemplo?
Queria fazer um count dentro da trigger e atribuir um valor a uma variável.
A que estou fazendo está com erro:
CREATE OR REPLACE
TRIGGER TEST_TRIGGER
BEFORE INSERT ON TEST
FOR EACH ROW
declare
total integer;
BEGINtotal := select count( :new.id_fk ) from dual;
if total > 2
then
raise_application_error('erro de count');
end if;END;
20 de outubro de 2009 às 12:30 am #90295Rodrigo Mesquita
ParticipanteVoce não pode fazer uma consulta na mesma tabela em um trigger before update ou insert. Vai dar erro de tabela em mutação.
20 de outubro de 2009 às 12:35 am #90296Ishii
ParticipanteOlá,
Neste caso será necessário usar o
PRAGMA autonomous_transactiondeclarado20 de outubro de 2009 às 12:36 am #90297Anakim
ParticipanteEntão, a unica maneira de fazer isso é com uma procedure de insert?
20 de outubro de 2009 às 1:37 am #90299Ishii
ParticipanteOlá,
Não, você pode declarar o autonomous_transaction na trigger mesmo.
[]s Ishii
20 de outubro de 2009 às 1:45 am #90301Anakim
ParticipanteVou tentar colocar esta constante na minha trigger.
Vocês saberiam aonde eu poderia conseguir um lugar para aprender sobre a sintaxe da pl do oracle, lembrando que estou vindo do postgre. 😉20 de outubro de 2009 às 2:08 am #90302Ishii
ParticipanteOlá,
No site da Oracle (precisa de cadastro) você já encontra bastante coisa, como você é de PostGre fica mais fácil…
http://www.oracle.com/pls/db102/homepage
[]s Ishii
20 de outubro de 2009 às 2:11 am #90303Anakim
ParticipanteValeu Ishii a trigger funcionou! 😛
Agora gostaria de entender o que significa esta constante que eu tive que inclui no meu código. -
AutorPosts
- Você deve fazer login para responder a este tópico.