- Este tópico contém 8 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 5 meses atrás por
rerodrig.
-
AutorPosts
-
1 de outubro de 2008 às 6:54 pm #82966
rerodrig
ParticipanteTenho uma procedure criada, que recebe um parâmetro do tipo rowtype. Vou criar uma trigger que chama essa procedure e quero passar o parâmetro :new, mas dá erro. Seria porque o :new é apenas uma referência a uma linha e não a própria linha? Tem algum outro modo de passar da trigger para a procedure, a linha inteira que está sendo alterada? Valeu!
2 de outubro de 2008 às 12:00 am #82978Marcio68Almeida
Participantevocê pode atribuir o valor da coluna para uma variável e trabalhar com ela.
2 de outubro de 2008 às 4:20 pm #82990rerodrig
ParticipanteMas o :new eu não consigo atribuir, tem outro jeito de fazer isso, que não seja atribuindo campo a campo para uma variável rowtype da tabela???
2 de outubro de 2008 às 4:26 pm #82991Anônimo
[quote=”rerodrig”:4ix0yl91]Tenho uma procedure criada, que recebe um parâmetro do tipo rowtype. Vou criar uma trigger que chama essa procedure e quero passar o parâmetro :new, mas dá erro. Seria porque o :new é apenas uma referência a uma linha e não a própria linha? Tem algum outro modo de passar da trigger para a procedure, a linha inteira que está sendo alterada? Valeu![/quote]
Bom dia!
Essa informação nova vem de uma tabela do banco?
2 de outubro de 2008 às 4:49 pm #82994rerodrig
ParticipanteBom dia, não, é uma informação que será inserida…a trigger dispara antes do insert…
2 de outubro de 2008 às 5:18 pm #82996Anônimo
Tem como vc colocar a trigger aqui para que eu possa dar uma olhada?
Por exemplo na Trigger Pre-insert
[declare v_aux number;begin select nvl(max(sofo_seq_socio),0) + 1 into v_aux from socio_fornecedor where fcre_cod_fce = :sofo.fcre_cod_fce; :sofo.sofo_cod_oper := user; :sofo.sofo_dat_oper := sysdate; :sofo.sofo_seq_socio := v_aux;end;]
2 de outubro de 2008 às 6:18 pm #83000rerodrig
ParticipanteO que eu quero fazer é basicamente o que está abaixo, passar uma linha da tabela como parametro. Nesse caso o parâmetro da procedure prc_funcionario é do tipo funcionarios%rowtype…mas não sei se dá certo, pelo fato do :new ser apenas uma referência…
create or replace trigger trg_funcionarios before insert on funcionarios for each row
begin
prc_funcionario(:new);
end;
2 de outubro de 2008 às 6:34 pm #83001Anônimo
[quote=”rerodrig”:3tlaacvl]O que eu quero fazer é basicamente o que está abaixo, passar uma linha da tabela como parametro. Nesse caso o parâmetro da procedure prc_funcionario é do tipo funcionarios%rowtype…mas não sei se dá certo, pelo fato do :new ser apenas uma referência…
[/quote]
create or replace trigger trg_funcionarios before insert on funcionarios for each row
begin
prc_funcionario(:new.'AQUI TEM UM CAMPO QUE É O DA PRC_FUNCIONARIO');
end;
TIPO ASSIM
TEM UMA TRIGGER COMO EXEMPLO
create or replace trigger TRG_ADITIVOS_X_CONT_FORN
before insert or update or delete on ADITIVOS_X_CONT_FORN
for each rowbegin
if deleting then
begin
update contrato_fornecimento
set CONF_QTD_ADITADA = nvl(CONF_QTD_ADITADA,0) - :old.AXCF_QTD_ADITADA
where INST_NUM_INSTITUICAO = :old.INST_NUM_INSTITUICAO
and CONT_SEQ_CONTRATO = :old.CONT_SEQ_CONTRATO
and CONT_ANO_CONTRATO = :old.CONT_ANO_CONTRATO
and FOMA_SEQ_ITEM = :old.FOMA_SEQ_ITEM
and MATE_COD_MATERIAL = :old.MATE_COD_MATERIAL;
exception
when others then
Raise_Application_error( -20050, 'Problemas na Atualizac?o da Tabela Contrato_Fornecimento !');
end;
elsif inserting then
begin
update contrato_fornecimento
set CONF_QTD_ADITADA = nvl(CONF_QTD_ADITADA,0) + :new.AXCF_QTD_ADITADA
where INST_NUM_INSTITUICAO = :new.INST_NUM_INSTITUICAO
and CONT_SEQ_CONTRATO = :new.CONT_SEQ_CONTRATO
and CONT_ANO_CONTRATO = :new.CONT_ANO_CONTRATO
and FOMA_SEQ_ITEM = :new.FOMA_SEQ_ITEM
and MATE_COD_MATERIAL = :new.MATE_COD_MATERIAL;
exception
when others then
Raise_Application_error( -20050, 'Problemas na Atualizac?o da Tabela Contrato_Fornecimento !');
end;end if;end;
[/QUOTE]
ESPERO QUE AJUDE
2 de outubro de 2008 às 6:49 pm #83003rerodrig
Participantevaleu, mas não é isso que quero…ali onde vc colocou ‘AQUI TEM UM CAMPO QUE É O DA PRC_FUNCIONARIO’, não é para ter nada, quero passar a linha inteira mesmo como parâmetro…mesmo assim valeu pela atenção!
-
AutorPosts
- Você deve fazer login para responder a este tópico.