PessoAll, bom dia.
Estou com uma dúvida e gostaria de ajuda para saná-la.
Tenho uma tabela com vários campos, dentre eles existem 2 que preciso que possuam o mesmo valor (COD_PROCESSO e NUM_CLIENTE).
Preciso fazer uma trigger para a cada INSERT ou UPDATE no campo COD_PROCESSO, ele copiar o conteúdo desse campo e adicionar também no campo NUM_CLIENTE.
Até o momento estou com a seguinte trigger:
create or replace trigger TRG_PREENCHE_NUM_CLIENTE
after insert or update on CADASTRO_CLIENTE
for each row
declare
-- local variables here
begin
update ORDENS_IMPORTACAO SET NUM_CLIENTE = NUM_ORDEM
end TRG_PREENCHE_NUM_CLIENTE;
Porém, nesse caso além de estar recebendo mensagem de erro, tenho a impressão de que para cada novo cadastro a trigger fará a alteração de todo o conteúdo da tabela!!!
Informações do Ambiente:
* Versão do Oracle: 10G
* Sistema Operacional: Win 2k3
Trigger referente a um único campo.
-
- Rank: Estagiário Sênior
- Mensagens: 9
- Registrado em: Qui, 11 Mar 2010 2:36 pm
- Localização: Campinas - SP
Renê Narcizo
presumindo que uma das tabelas possui chave estrangeira apontando para a outra, ficaria assim:
Sendo que CAMPO_X (no código) é ou a PK da tabela ORDENS_IMPORTACAO que é apontada pela FK CAMPO_Y da tabela CADASTRO_CLIENTE ou o contrário (FK que aponta para PK da outra).
Segue esta linha de pensamento que funciona...
create or replace trigger TRG_PREENCHE_NUM_CLIENTE
after insert or update of COD_PROCESSO on CADASTRO_CLIENTE
for each row
begin
update ORDENS_IMPORTACAO SET NUM_CLIENTE = :NEW.COD_PROCESSO WHERE CAMPO_X = :NEW.CAMPO_Y;
end TRG_PREENCHE_NUM_CLIENTE;
Segue esta linha de pensamento que funciona...
-
- Rank: Estagiário Sênior
- Mensagens: 9
- Registrado em: Qui, 11 Mar 2010 2:36 pm
- Localização: Campinas - SP
Renê Narcizo
Burga, boa noite...
muito obrigado por sua ajuda, mas eu cometí um engano no envio da trigger...
Segue abaixo a trigger que estou utilizando:
create or replace trigger TRG_PREENCHE_NUM_CLIENTE
after insert or update of NUM_ORDEM on CADASTRO_CLIENTES
for each row
begin
update CADASTRO_CLIENTES SET NUM_CLIENTE = :NEW.NUM_ORDEM
WHERE NUM_ORDEM = :NEW.NUM_ORDEM;
COMMIT;
end TRG_IS_PREENCHE_NOME_CLIENTE;
desculpa, eu misturei as coisas e enviei coisa errada... hehehe
Como pode ver, trata-se de um update em um campo na mesma linha...
Ao executar a trigger acima, recebo as seguintes mensagens de erro:
ORA-04091 - A TABELA CADASTRO_CLIENTES É MUTANTE; TALVEZ O GATILHO/FUNÇÃO NÃO POSSA LOCALIZÁ-LA.
ORA-06512 - EM "CADASTRO_CLIENTES", LINE 2
ORA-04088 - ERRO DURANTE A EXECUÇÃO DO GATILHO;
muito obrigado por sua ajuda, mas eu cometí um engano no envio da trigger...
Segue abaixo a trigger que estou utilizando:
create or replace trigger TRG_PREENCHE_NUM_CLIENTE
after insert or update of NUM_ORDEM on CADASTRO_CLIENTES
for each row
begin
update CADASTRO_CLIENTES SET NUM_CLIENTE = :NEW.NUM_ORDEM
WHERE NUM_ORDEM = :NEW.NUM_ORDEM;
COMMIT;
end TRG_IS_PREENCHE_NOME_CLIENTE;
desculpa, eu misturei as coisas e enviei coisa errada... hehehe
Como pode ver, trata-se de um update em um campo na mesma linha...
Ao executar a trigger acima, recebo as seguintes mensagens de erro:
ORA-04091 - A TABELA CADASTRO_CLIENTES É MUTANTE; TALVEZ O GATILHO/FUNÇÃO NÃO POSSA LOCALIZÁ-LA.
ORA-06512 - EM "CADASTRO_CLIENTES", LINE 2
ORA-04088 - ERRO DURANTE A EXECUÇÃO DO GATILHO;
- dr_gori
- Moderador
- Mensagens: 5026
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você tem que usar uma trigger BEFORE INSERT ou UPDATE.
Dai basta setar o campo :NEW.campo = xxxxxxx
Dessa forma você consegue manipular os dados antes de insert ou update acontecer.
Tente dessa forma!
Dai basta setar o campo :NEW.campo = xxxxxxx
Dessa forma você consegue manipular os dados antes de insert ou update acontecer.
Tente dessa forma!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante