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] >