RES: [oracle_br] Tabela Mutante!

2007-12-01 Por tôpico Josir Gomes
Olá pessoal, deixa eu deixar os meus 2 centavos na discussão:

na GRANDE maioria das vezes que eu vi situações de mutating era uma 
falha na modelagem. Faça uma revisão na modelagem desta estrutura e veja 
se ela está nas formas normais, etc. Porque ao se alterar um registro, 
vc tem setar outros para nulo ?? Não conheço o seu modelo, estou apenas 
abrindo as possibilidades...

Assumindo que o seu modelo está correto ou caso vc não tenha permissão 
ou não possa alterar o modelo:

1) Solução PRAGMA AUTONOMOUS_TRANSACTION na trigger

Eu acho esta solução uma aberração e deveria ser banida do Oracle!!! :)
Primeiro porque eu colocar COMMIT em uma trigger ou até mesmo em uma 
procedure/package é um tiro no pé. Só se deve colocar COMMIT no 
front-end ou em casos batch na rotina mais externa. Qualquer outra opção 
fora disso, é problema certo a longo prazo.

No caso específico da sua trigger, imagine a situação: vc dá o update e 
chama a transação autonoma que seta nulo os campos. Mais a frente, o 
usuário dá rollback ou acontece um outro erro. Qual o resultado: os 
atributos ficaram com nulo e o resto dos registros envolvidos voltaram a 
posição inicial... A sua modelagem irá aceitar isso??

2) Solução aceitável:

- Crie uma tabela temporária CP_TEMP que conterá os registros que vc 
terá que alterar
- Na trigger, apenas insira os registros que comandarão o SET NULL
INSERT INTO CP_TEMP VALUES ( :NEW.cd_lancam, :NEW.nr_anolot, 
:NEW.cd_lote );
- Crie uma trigger AFTER STATEMENT que irá chamar a procedure MarcaNulo()

- A procedure MarcaNulo() irá consultar a tabela e remover os registros 
desejados:

  begin
 for c1 in (SELECT * FROM CP_TEMP) loop
 UPDATE Cpbaidup
 SET Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
  Where cd_lancam = c1.cd_lancam And nr_anolot = 
c1.nr_anolot And cd_lote = c1.cd_lote;
 end loop;
  end;

O AFTER STATEMENT também poderá dar erro de mutating caso os registros 
alterados sejam os mesmos que vc acabou de alterar.
Neste caso, vc terá que usar JOBS mas aí a solução é mais complexa 
Se não funcionar me fale.

Boa Sorte,
Josir.


[As partes desta mensagem que não continham texto foram removidas]



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Bruno Lorenzini
Sem commit o máximo que poderia acontecer seria um DEAD LOCK... não é o
caso.

 

Sds,

 

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Marcelo
Enviada em: sexta-feira, 30 de novembro de 2007 15:21
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Tabela Mutante!

 

Acho que faltou você declarar um COMMIT, pois você está usando PRAGRMA
AUTONOMOUS_TRANSACTION.



Marcelo Alberto Lauschner 
Tecnologia e Sistemas
Auto Pratense Ltda 
* - Fone: (0XX54) 3242-3615
* - Fax: (0XX54) 3242-3648
* - E-mail: BLOCKED::mailto:[EMAIL PROTECTED]
mailto:marcelo%40autopratense.com.br e.com.br
[EMAIL PROTECTED] mailto:marcelo%40autopratense.com.br e.com.br
* - WWW: www.autopratense.com.br BLOCKED::http://www.autoprat
http://www.autopratense.com.br/ ense.com.br/ 
_ 

De: [EMAIL PROTECTED] mailto:oracle_br%40yahoogrupos.com.br os.com.br
[mailto:[EMAIL PROTECTED] mailto:oracle_br%40yahoogrupos.com.br
os.com.br] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 16:05
Para: [EMAIL PROTECTED] mailto:oracle_br%40yahoogrupos.com.br os.com.br
Assunto: [oracle_br] Tabela Mutante!

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: conflito detectado ao aguardar recurso creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!


[As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Marcelo
Acho que faltou você declarar um COMMIT, pois você está usando PRAGRMA
AUTONOMOUS_TRANSACTION.
 
 
 
Marcelo Alberto Lauschner 
Tecnologia e Sistemas
Auto Pratense Ltda 
* - Fone: (0XX54) 3242-3615
* - Fax: (0XX54) 3242-3648
* - E-mail:  BLOCKED::mailto:[EMAIL PROTECTED]
[EMAIL PROTECTED]
* - WWW: www.autopratense.com.br BLOCKED::http://www.autopratense.com.br/ 
  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 16:05
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Tabela Mutante!
 
Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: conflito detectado ao aguardar recurso creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!
 


[As partes desta mensagem que não continham texto foram removidas]



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico Bruno Lorenzini
Vamos pensar lógicamente...

 

Você altera a sua tabela. Ela dispara a trigger... oq a trigger faz?

 

A trigger altera a tabela... oq uma alteração na sua tabela faz? Dispara a
trigger...

 

Oq a trigger faz? Altera a tabela...

 

E assim vai...

 

 

É isso que significa sua tabela ser “mutante” rs :D

 

Ainda bem que a o Oracle identifica esse tipo de coisa e dispara esse erro.

 

Abs,

 

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 15:05
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Tabela Mutante!

 

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: conflito detectado ao aguardar recurso creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!

 



[As partes desta mensagem que não continham texto foram removidas]



RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico HENRIQUIS Milton
Sim Bruno, vc está certo, porém, o que o colega deseja
fazer é que a trigger seja disparada quando se altera um
certo campo, e então atualizar um outro campo.
Portanto, o raciocínio lógico dele está correto.
 
Nonodetorres:
Acesse essa página:
 
http://www.psoug.org/reference/table_trigger.html
 
E procure pelo texto:
Mutating Trigger Fix With Autonomous Transaction
 
 
Não sei se o seu caso tem solução, mas leia, veja
se consegue entender, e tente pra v er se dá certo.
 

Milton Bastos Henriquis Junior

Oracle Database Administrator

 

 

-Mensagem original-
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de 
Bruno Lorenzini
Enviada em: sexta-feira, 30 de novembro de 2007 17:25
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Tabela Mutante!



Vamos pensar lógicamente...

Você altera a sua tabela. Ela dispara a trigger... oq a trigger faz?

A trigger altera a tabela... oq uma alteração na sua tabela faz? 
Dispara a
trigger...

Oq a trigger faz? Altera a tabela...

E assim vai...

É isso que significa sua tabela ser mutante rs :D

Ainda bem que a o Oracle identifica esse tipo de coisa e dispara esse 
erro.

Abs,

_ 

De: oracle_br@yahoogrupos.com.br 
mailto:oracle_br%40yahoogrupos.com.br  [mailto:oracle_br@yahoogrupos.com.br 
mailto:oracle_br%40yahoogrupos.com.br ] Em
nome de nunodetorres
Enviada em: sexta-feira, 30 de novembro de 2007 15:05
Para: oracle_br@yahoogrupos.com.br 
mailto:oracle_br%40yahoogrupos.com.br 
Assunto: [oracle_br] Tabela Mutante!

Boa Tarde a todos!

Estou com um grande problema com um trigger.

É o seguinte:

Possuo um trigger, onde nela tenho que atualizar a propria tabela
onde o trigger esta vinculado, e esse trigger é Before On
Uptade And Delete. 

No entanto quando atualizo um registro nesta tabela me retorna um erro
dizendo: conflito detectado ao aguardar recurso creio que seja 
porque quando atualizo o campo despara o trigger e como dentro desse
trigger tem um update, dai entra em um loop ...

Código da Trigger:

DECLARE
V_ROW NUMBER(10);
V_ENTRA NUMBER(1);
Pragma Autonomous_Transaction;
BEGIN
Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
Where cd_lancam = :NEW.cd_lancam
And nr_anolot = :NEW.nr_anolot
And cd_lote = :NEW.cd_lote;
end if;
End if;
END;

Gostaria de saber se possui uma outra maneira em que quando 
atualizar um determinado registro dessa tabela atualize outros campos
dessa mesma tabela.

Não sei se me fiz entender.

Agradeço a todos.

Abraço!

[As partes desta mensagem que não continham texto foram removidas]



 



[As partes desta mensagem que não continham texto foram removidas]



Re: RES: [oracle_br] Tabela Mutante!

2007-11-30 Por tôpico nunodetorres
Sim.. esse pensamento lógico eu ja tive tanto é que já coloquei em minha
pergunta a causa do erro o que gostaria de saber é como contornar esse
tipo de problema, ou seja, em um trigger atualizar outros registros da
mesma tabela sem 
que ocorra esse tipo de erro mutante, ou loop infinito ?
 
Grato!


--- Em oracle_br@yahoogrupos.com.br, Bruno Lorenzini
[EMAIL PROTECTED] escreveu

 Vamos pensar lógicamente...
 
  
 
 Você altera a sua tabela. Ela dispara a trigger... oq a trigger faz?
 
  
 
 A trigger altera a tabela... oq uma alteração na sua tabela faz?
Dispara a
 trigger...
 
  
 
 Oq a trigger faz? Altera a tabela...
 
  
 
 E assim vai...
 
  
 
  
 
 É isso que significa sua tabela ser mutante rs :D
 
  
 
 Ainda bem que a o Oracle identifica esse tipo de coisa e dispara
esse erro.
 
  
 
 Abs,
 
  
 
   _  
 
 De: oracle_br@yahoogrupos.com.br
[mailto:[EMAIL PROTECTED] Em
 nome de nunodetorres
 Enviada em: sexta-feira, 30 de novembro de 2007 15:05
 Para: oracle_br@yahoogrupos.com.br
 Assunto: [oracle_br] Tabela Mutante!
 
  
 
 Boa Tarde a todos!
 
 Estou com um grande problema com um trigger.
 
 É o seguinte:
 
 Possuo um trigger, onde nela tenho que atualizar a propria tabela
 onde o trigger esta vinculado, e esse trigger é Before On
 Uptade And Delete. 
 
 No entanto quando atualizo um registro nesta tabela me retorna um erro
 dizendo: conflito detectado ao aguardar recurso creio que seja 
 porque quando atualizo o campo despara o trigger e como dentro desse
 trigger tem um update, dai entra em um loop ...
 
 Código da Trigger:
 
 DECLARE
 V_ROW NUMBER(10);
 V_ENTRA NUMBER(1);
 Pragma Autonomous_Transaction;
 BEGIN
 Update Cpbaidup Set cd_lancam = Null, nr_anolot = Null, cd_lote = null
 Where cd_lancam = :NEW.cd_lancam
 And nr_anolot = :NEW.nr_anolot
 And cd_lote = :NEW.cd_lote;
 end if;
 End if;
 END;
 
 Gostaria de saber se possui uma outra maneira em que quando 
 atualizar um determinado registro dessa tabela atualize outros campos
 dessa mesma tabela.
 
 Não sei se me fiz entender.
 
 Agradeço a todos.
 
 Abraço!
 
  
 
 
 
 [As partes desta mensagem que não continham texto foram removidas]





Res: [oracle_br] Tabela Mutante !

2007-05-17 Por tôpico Alexsandro Pereira
;


 



 


  - Original Message - 

  From: 
  Alexsandro Pereira 

  To: oracle_br@yahoogrupos.com.br 
  

  Sent: Wednesday, May 16, 2007 6:05 
  PM

  Subject: Res: [oracle_br] Tabela Mutante 
  !

  


  
  
  
  Amigo,

na realidade, você não vai conseguir executar a operação 
  desejada. O que fazemos é guardar em um array a identificação do registro 
para 
  ser processada depois. Num trigger for each row, populo o array e num trigger 
  after statement leio o array e faço as atualizações. As alterações podem ser 
  feitas no segundo trigger. Eu cortei boa parte do texto dos triggers mas acho 
  que dá para você ter uma idéia.

Att,
Alexsandro 
  Pereira.

- Mensagem original 
De: nunodetorres jr_consystec@ terra.com. br
Para: 
  [EMAIL PROTECTED] os.com.br
Enviadas: 
  Quarta-feira, 16 de Maio de 2007 17:15:25
Assunto: [oracle_br] Tabela 
  Mutante !

Boa Tarde Pessoal!

Tenho um trigger onde estou 
  atualizando um registro na mesma tabela da 

trigger, e esta exibindo a 
  seguinte mensagem de erro. 

ORA-2: -4091 (PR_DOCUMENTOS_ 002) 
  ORA-04091: a tabela 

SAUDEAD600.DOCUMENT OS é mutante; talvez o 
  gatilho/função não possa 

localizá-la

Porém, na procedure foi 
  declarado o comando PRAGMA 

AUTONOMOUS_TRANSACT ION. 

Preciso de 
  mais alguma coisa para poder executar essa procedure sem 

erros? ou se 
  tiverem alguma outra sugestão será bem vinda?

Abraço a todos! 
  

!--

#ygrp-mlmsg 
  {font-size:13px; font-family: arial, helvetica, clean, 
  sans-serif;}
#ygrp-mlmsg table 
  {font-size:inherit; font:100% ;}
#ygrp-mlmsg select, input, 
  textarea {font:99% arial, helvetica, clean, sans-serif;}
#ygrp-mlmsg pre, 
  code {font:115% monospace;}
#ygrp-mlmsg * 
  {line-height: 1.22em;}
#ygrp-text{
font-family: Georgia;
}
#ygrp-text 
  p{
margin:0 0 1em 
  0;}
#ygrp-tpmsgs{
font-family: Arial;
clear:both;}
#ygrp-vitnav{
padding-top: 10px;font- family:Verdana; font-size: 77%;margin: 0;}
#ygrp-vitnav 
  a{
padding:0 1px;}
#ygrp-actbar{
clear:both;margin: 25px 
  0;white-space: nowrap;color: #666;text- align:right; }
#ygrp-actbar 
  .left{
float:left;white- space:nowrap; }
.bld{font-weight: bold;}
#ygrp-grft{
font-family: Verdana;font- size:77%; padding:15px 
  0;}
#ygrp-ft{
font-family: verdana;font- size:77%; border-top: 1px 
  solid #666;
padding:5px 0;
}
#ygrp-mlmsg 
  #logo{
padding-bottom: 10px;}

#ygrp-vital{
background-color: #e0ecee;margin- bottom:20px; padding:2px 
  0 8px 8px;}
#ygrp-vital 
  #vithd{
font-size:77% ;font-family: Verdana;font- weight:bold; color:#333; 
text-transform: uppercase; }
#ygrp-vital 
  ul{
padding:0;margin: 2px 0;}
#ygrp-vital ul 
  li{
list-style-type: none;clear: both;border: 1px solid 
  #e0ecee;
}
#ygrp-vital ul li 
  .ct{
font-weight: bold;color: #ff7900;float: right;width: 2em;text- align:right; 
padding-right: .5em;}
#ygrp-vital 
  ul li .cat{
font-weight: bold;}
#ygrp-vital a 
  {
text-decoration: none;}

#ygrp-vital 
  a:hover{
text-decoration: underline; }

#ygrp-sponsor 
  #hd{
color:#999;font- size:77%; }
#ygrp-sponsor 
  #ov{
padding:6px 
  13px;background- color:#e0ecee; margin-bottom: 20px;}
#ygrp-sponsor 
  #ov ul{
padding:0 0 0 8px;margin:0; }
#ygrp-sponsor #ov 
  li{
list-style-type: square;padding: 6px 
  0;font-size: 77%;}
#ygrp-sponsor #ov li 
  a{
text-decoration: none;font- size:130% ;}
#ygrp-sponsor 
  #nc {
background-color: #eee;margin- bottom:20px; padding:0 
  8px;}
#ygrp-sponsor .ad{
padding:8px 0;}
#ygrp-sponsor .ad 
  #hd1{
font-family: Arial;font- weight:bold; color:#628c2a; font-size: 100%;line- 
height:122% ;}
#ygrp-sponsor 
  .ad a{
text-decoration: none;}
#ygrp-sponsor .ad 
  a:hover{
text-decoration: underline; }
#ygrp-sponsor .ad 
  p{
margin:0;}
o {font-size:0; }
.MsoNormal {
margin:0 0 0 
  0;}
#ygrp-text tt{
font-size:120% ;}
blockquote{margin: 0 0 0 
  4px;}
.replbq 
  {margin:4;}
--

 _ _ _ _ __
Fale 
  com seus amigos de graça com o novo Yahoo! Messenger 
http://br.messenger .yahoo.com/ 
  
--

CREATE OR REPLACE PACKAGE K_MNT_OFA IS 

-- Autor: 
  Erick Pacheco 
-- Data : 04/02/2000 
-- Finalidade: Gerar variáveis de 
  trabalho para os triggers 
-- TG_OFA_01 e TG_OFA_02. 

TYPE oficina 
  IS RECORD 
(cd_material v_material_impl. cd_material %type 
  
,cd_material_ nha v_material_impl. cd_material %type 
  
,cd_unidade_ apoiada v_unidades_aer_ brasil.cd_ unidade %type 
  
,cd_oficina_ apoio t_oficina_apoio. cd_oficina_ apoio %type); 
  

TYPE t_oficina IS TABLE OF oficina 
INDEX BY BINARY_INTEGER; 
  

v_oficina t_oficina; 
v_contador BINARY_INTEGER := 0; 
END; 
  
/ 

--

CREATE OR REPLACE TRIGGER TG_OFA_01 
BEFORE 
  INSERT OR UPDATE 
OF IN_GERENTE, CD_MATERIAL_ NHA, CD_UNIDADE_APOIO, 
  CD_UNIDADE_SETOR 
ON T_OFICINA_APOIO 
FOR EACH ROW 

DECLARE 
  
v_in_conj_comp varchar2(1); 

BEGIN

Res: [oracle_br] Tabela Mutante !

2007-05-16 Por tôpico Alexsandro Pereira
Amigo,

na realidade, você não vai conseguir executar a operação desejada. O que 
fazemos é guardar em um array a identificação do registro para ser processada 
depois. Num trigger for each row, populo o array e num trigger after statement 
leio o array e faço as atualizações. As alterações podem ser feitas no segundo 
trigger. Eu cortei boa parte do texto dos triggers mas acho que dá para você 
ter uma idéia.

Att,
Alexsandro Pereira.


- Mensagem original 
De: nunodetorres [EMAIL PROTECTED]
Para: oracle_br@yahoogrupos.com.br
Enviadas: Quarta-feira, 16 de Maio de 2007 17:15:25
Assunto: [oracle_br] Tabela Mutante !









  



Boa Tarde Pessoal!



Tenho um trigger onde estou atualizando um registro na mesma tabela da 

trigger, e esta exibindo a seguinte mensagem de erro. 



ORA-2: -4091 (PR_DOCUMENTOS_ 002) ORA-04091: a tabela 

SAUDEAD600.DOCUMENT OS é mutante; talvez o gatilho/função não possa 

localizá-la



Porém, na procedure foi declarado o comando PRAGMA 

AUTONOMOUS_TRANSACT ION. 



Preciso de mais alguma coisa para poder executar essa procedure sem 

erros? ou se tiverem alguma outra sugestão será bem vinda?



Abraço a todos! 






  







!--

#ygrp-mlmsg {font-size:13px;font-family:arial, helvetica, clean, sans-serif;}
#ygrp-mlmsg table {font-size:inherit;font:100%;}
#ygrp-mlmsg select, input, textarea {font:99% arial, helvetica, clean, 
sans-serif;}
#ygrp-mlmsg pre, code {font:115% monospace;}
#ygrp-mlmsg * {line-height:1.22em;}
#ygrp-text{
font-family:Georgia;
}
#ygrp-text p{
margin:0 0 1em 0;}
#ygrp-tpmsgs{
font-family:Arial;
clear:both;}
#ygrp-vitnav{
padding-top:10px;font-family:Verdana;font-size:77%;margin:0;}
#ygrp-vitnav a{
padding:0 1px;}
#ygrp-actbar{
clear:both;margin:25px 0;white-space:nowrap;color:#666;text-align:right;}
#ygrp-actbar .left{
float:left;white-space:nowrap;}
.bld{font-weight:bold;}
#ygrp-grft{
font-family:Verdana;font-size:77%;padding:15px 0;}
#ygrp-ft{
font-family:verdana;font-size:77%;border-top:1px solid #666;
padding:5px 0;
}
#ygrp-mlmsg #logo{
padding-bottom:10px;}

#ygrp-vital{
background-color:#e0ecee;margin-bottom:20px;padding:2px 0 8px 8px;}
#ygrp-vital #vithd{
font-size:77%;font-family:Verdana;font-weight:bold;color:#333;text-transform:uppercase;}
#ygrp-vital ul{
padding:0;margin:2px 0;}
#ygrp-vital ul li{
list-style-type:none;clear:both;border:1px solid #e0ecee;
}
#ygrp-vital ul li .ct{
font-weight:bold;color:#ff7900;float:right;width:2em;text-align:right;padding-right:.5em;}
#ygrp-vital ul li .cat{
font-weight:bold;}
#ygrp-vital a {
text-decoration:none;}

#ygrp-vital a:hover{
text-decoration:underline;}

#ygrp-sponsor #hd{
color:#999;font-size:77%;}
#ygrp-sponsor #ov{
padding:6px 13px;background-color:#e0ecee;margin-bottom:20px;}
#ygrp-sponsor #ov ul{
padding:0 0 0 8px;margin:0;}
#ygrp-sponsor #ov li{
list-style-type:square;padding:6px 0;font-size:77%;}
#ygrp-sponsor #ov li a{
text-decoration:none;font-size:130%;}
#ygrp-sponsor #nc {
background-color:#eee;margin-bottom:20px;padding:0 8px;}
#ygrp-sponsor .ad{
padding:8px 0;}
#ygrp-sponsor .ad #hd1{
font-family:Arial;font-weight:bold;color:#628c2a;font-size:100%;line-height:122%;}
#ygrp-sponsor .ad a{
text-decoration:none;}
#ygrp-sponsor .ad a:hover{
text-decoration:underline;}
#ygrp-sponsor .ad p{
margin:0;}
o {font-size:0;}
.MsoNormal {
margin:0 0 0 0;}
#ygrp-text tt{
font-size:120%;}
blockquote{margin:0 0 0 4px;}
.replbq {margin:4;}
--







__
Fale com seus amigos  de graça com o novo Yahoo! Messenger 
http://br.messenger.yahoo.com/ 
  --

CREATE  OR REPLACE PACKAGE K_MNT_OFA IS

-- Autor: Erick Pacheco
-- Data : 04/02/2000
-- Finalidade: Gerar variáveis de trabalho para os triggers
-- TG_OFA_01 e TG_OFA_02.

TYPE oficina IS RECORD 
 (cd_materialv_material_impl.cd_material  %type
 ,cd_material_nhav_material_impl.cd_material  %type
 ,cd_unidade_apoiada v_unidades_aer_brasil.cd_unidade %type
 ,cd_oficina_apoio   t_oficina_apoio.cd_oficina_apoio %type);

TYPE t_oficina IS TABLE OF oficina
 INDEX BY BINARY_INTEGER;

v_oficina   t_oficina;
v_contador  BINARY_INTEGER := 0;
END;
/

  --

CREATE OR REPLACE TRIGGER TG_OFA_01
BEFORE INSERT OR UPDATE
OF IN_GERENTE, CD_MATERIAL_NHA, CD_UNIDADE_APOIO, CD_UNIDADE_SETOR
ON T_OFICINA_APOIO
FOR EACH ROW

DECLARE
  v_in_conj_comp  varchar2(1);

BEGIN
   
   --- PROGRAMA  : TG_OFA_01.TXT---
   --- DATA  : 04/02/2000   ---
   
   if :new.cd_materialis not null and
  :new.cd_material_nhais not null and
  :new.cd_unidade_apoiada is not null then

 K_MNT_OFA.v_contador := K_MNT_OFA.v_contador + 1;

 if INSERTING or UPDATING then

   K_MNT_OFA.v_oficina(K_MNT_OFA.v_contador).cd_material