Problema com cursor / trigger / sp
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.
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
Curtidas 0
Respostas
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;
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
28/11/2006
Putz, faz sentido. Vou testar mas acho que é isso mesmo.
Valeu pela ajuda camarada.
Valdecir
Valeu pela ajuda camarada.
Valdecir
GOSTEI 0