Problema com cursor / trigger / sp

Oracle

28/11/2006

Não conheço muito bem o pl/sql. Após muito trabalho consegui escrever uma trigger que faz uma pesquisa sql (que sempre retorna uma única linha) e jogo o resultado num cursor. Depois faço um loop nesse cursor e pego o conteúdo de cada campo da linha armazenada nele e mando como parâmetro para um SP que vai usar esses valores para gravar em uma tabela.
Agora o problema. Tenho que fazer a mesma coisa para outra query, porém essa me retorna mais de uma linha. Agora, se eu jogar o resultado dessa query num cursor, o que está sendo passado pra SP é apenas a ultima linha do result set.

Prciso fazer um loop nesse result set e jogar cada linha em um cursor, fazer um loop em cima do cursor, pegar cada campo e jogar em uma respectiva variável e passar essas variaveis para a SP.

Como faço isso? Alguém pode me ajudar?
abaixo está o código que escrevi:

CURSOR PECA_OS IS << PROBLEMA: ESSA SQL PODE RETORNAR MAIS DE UMA LINHA
SELECT OSS_PC_TRATAM_ORC.DES_PECA,
OSS_PC_TRATAM_ORC.QTD_PECA,
OSS_PC_TRATAM_ORC.FICHA_NUM,
OSS_PC_TRATAM_ORC.SEQUENCIA_PECA from
OSS_PC_TRATAM_ORC
where OSS_PC_TRATAM_ORC.orcamento = :new.orcamento
and OSS_PC_TRATAM_ORC.SEQUENCIA_ITEM= :new.SEQUENCIA_ITEM;

BEGIN
for C1 in PECA_OS loop << ISSO NÃO FUNCIONA POIS GRAVA APENAS UMA LINHA
v_nrficha := C1.FICHA_NUM;
v_desc_peca := C1.DES_PECA;
v_quatidadepeca := C1.QTD_PECA;
V_sequencia_peca := C1.SEQUENCIA_PECA;
end loop;

ALIMENTA_PECA_OS(V_pedido,V_preactor,V_sequencia_peca,v_nrficha,
v_desc_peca,v_quatidadepeca);
end;


Esse código é numa trigger disparada no after update de uma tabela.

Desde já agradeço qualquer dica.


Vborn

Vborn

Curtidas 0

Respostas

Motta

Motta

28/11/2006

acho que a sol. serioa chamar a sp dentro do loop

BEGIN
for C1 in PECA_OS loop << ISSO NÃO FUNCIONA POIS GRAVA APENAS UMA LINHA
v_nrficha := C1.FICHA_NUM;
v_desc_peca := C1.DES_PECA;
v_quatidadepeca := C1.QTD_PECA;
V_sequencia_peca := C1.SEQUENCIA_PECA;
ALIMENTA_PECA_OS(V_pedido,V_preactor,V_sequencia_peca,v_nrficha,
v_desc_peca,v_quatidadepeca); -- nem precisaria das variaveis
end loop;


end;


GOSTEI 0
Vborn

Vborn

28/11/2006

Putz, faz sentido. Vou testar mas acho que é isso mesmo.

Valeu pela ajuda camarada.

Valdecir


GOSTEI 0
POSTAR