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


Responder a