Concordo com tudo que foi dito sobre a serialização e utilização das variaveis :NEW, mas pelo que entendi esse trigger seria da TABELA PAI e a necessidade é GUARDAR O ID gerado pela trigger para utiliza-lo em um insert posterior na tabela filha.
Emerson, além de considerar as observações feitas, sugiro que utilize o INSERT RETURNING conforme já indiquei na minha mensagem anterior. Veja um exemplo bem parecido com o seu caso em http://www.adp-gmbh.ch/ora/sql/insert_into_x_returning_y.html Abs, Zilmar Furquim --- Em oracle_br@yahoogrupos.com.br, "J. Laurindo Chiappa" escreveu > > Olhando rapidamente eu não tinha visto mas se tem, okdoc : fica mais > ininteligível ainda o fato dele não estar populando o regtype :NEW com os > valores que quer.... > > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr." escreveu > > > > Mas no código dele aqui do e-mail tem sim o "FOR EACH ROW"... > > > > > > > > 2013/2/14 J. Laurindo Chiappa > > > > > ** > > > > > > > > > Não só isso, Milton : para que vc possa ter acesso às rowtypes :NEW e > > > :OLD, não esqueçamos que é Exigido que a trigger seja do tipo FOR EACH > > > ROW, > > > o que não acontece no caso em questão... > > > Emerson , além da questão acima, pelo que vejo vc está programando em modo > > > MONO-USUÁRIO : o que acontece se duas sessões forem fazer INSERT ao mesmo > > > tempo nessa tabela, vc pensou nisso ???? Me parece que não, pois Não Vejo > > > nenhum tipo de LOCK aí para serializar o acesso, então há SIM chances de > > > duas sessões obterem o mesmo valor, sim ??? E se o sujeito pedir um > > > ROLLBACK na sessão, a tua lógica não me parece estar preparada para > > > desfazer a seleção na tabela de valores... > > > No instante em que vc , por necessidade inadiável ou não, se põe a simular > > > uma SEQUENCE, faça-o DE MODO COMPLETO, serializando, controlando a > > > transação, sim ? > > > > > > []s > > > > > > Chiappa > > > > > > OBS : nem entro no mérito nas questões de PERFORMANCE, INTEGRIDADE DE > > > DADOS e SEGURANÇA : é óbvio que um código seu, interpretado, não vai > > > conseguir facilmente competir em nenhum desses quesitos com o código em C > > > nativo no RDBMS para as sequences.... > > > > > > --- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr." > > > escreveu > > > > > > > > > > > A Trigger é de before insert, nessa tal tabela filha que vc mencionou, > > > > correto? > > > > > > > > Basta fazer o campo (:new.nomedocampo) receber o valor dessa tal > > > > variável > > > > (vc falou V_SEQ, mas essa variavel não existe na trigger... não seria > > > > G_SEQ?). > > > > > > > > > > > > > > > > On Thu, Feb 14, 2013 at 2:46 PM, emerson_sanches > > > > wrote: > > > > > > > > > ** > > > > > > > > > > > > > > > > > > Boa tarde pessoal da lista. Desenvolvi uma trigger para gerar um > > > numero de > > > > > id de uma tabela mestre. segue a mesma: > > > > > > > > > > CREATE OR REPLACE TRIGGER SGI5_TRG_REC_TM1_SEQ > > > > > BEFORE INSERT ON SGI5_TAB_REC_TM1 > > > > > FOR EACH ROW > > > > > DECLARE > > > > > G_SEQ NUMBER; > > > > > > > > > > CURSOR C_SEQ IS > > > > > SELECT CASE > > > > > WHEN NVL(MAX(A.NR_DOCTO),0) < 700000000 THEN 700000000 > > > > > ELSE > > > > > NVL(MAX(A.NR_DOCTO),0) + 1 > > > > > END SEQ > > > > > FROM EPMV A; > > > > > > > > > > BEGIN > > > > > IF :NEW.TM1_NRM IS NULL THEN > > > > > OPEN C_SEQ; > > > > > FETCH C_SEQ INTO G_SEQ; > > > > > CLOSE C_SEQ; > > > > > > > > > > :NEW.TM1_NRM:= G_SEQ; > > > > > END IF; > > > > > END; > > > > > > > > > > Sei que alguns irão me dizer pra usar sequence, mas nesse caso, > > > > > infelizmente não posso. > > > > > O problema eh que preciso conseguir pegar o valor gerado na variável > > > V_SEQ > > > > > para fazer inserção na tabela filha. > > > > > Como faço isso? > > > > > > > > > > Obrigado pela atenção. > > > > > > > > > > Emerson > > > > > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > >