Forum Pplware
Insert de variável em tabela - PL SQL dúvida - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Insert de variável em tabela - PL SQL dúvida (/showthread.php?tid=7093)



Insert de variável em tabela - PL SQL dúvida - suicinha - 09-09-2010 16:08

Olá!

Tenho o seguinte procedimento:

Código:
CREATE OR REPLACE PROCEDURE PICAGE."SP_AGE_SEM_GEST" (
p_procedure OUT VARCHAR2,
p_periodo_calc IN NUMBER := 201006001)
IS
v VARCHAR2 (32766);

CURSOR ent_vend
IS
SELECT DISTINCT ent_com.cod_ent_vend
FROM tbl_ref_funcao func, tbl_conf_hier_comercial_teste hier INNER JOIN tbl_conf_ent_comercial_teste ent_com
ON ( hier.id_conf_ent_comercial = ent_com.id_conf_ent_comercial
AND hier.id_conf_cal_periodo_calc =
ent_com.id_conf_cal_periodo_calc
)
LEFT OUTER JOIN tbl_conf_hier_comercial_teste hier1
ON ( hier.id_conf_ent_comercial_pai =
hier1.id_conf_ent_comercial
AND hier.id_conf_cal_periodo_calc =
hier1.id_conf_cal_periodo_calc
)
WHERE hier.id_ref_canal = 1
AND hier.id_ref_funcao = 6
AND hier.id_conf_cal_periodo_calc = 201006001
AND hier1.id_ref_funcao <> 3;
BEGIN
FOR ev IN ent_vend
LOOP
v := v || ev.cod_ent_vend || ',';
END LOOP;

p_procedure := 'Entidade de Venda = ' || v;
DBMS_OUTPUT.put_line (p_procedure);
END sp_age_sem_gest;


Que efectua uma query, guarda na variável os valores obtidos separados por 'virgula'.

Agora preciso ter outro procedimento que receba o valor da variável (p_procedure) e faça insert numa tabela, mas coloque um registo por linha da tabela e não todos os registos na mesma linha.

Podem ajudar-me???

Obrigada


RE: Insert de variável em tabela - PL SQL dúvida - jaimetotal - 14-09-2010 00:09

Also assim? http://www.dbforums.com/oracle/998642-pl-sql-splitting-string-into-array.html


RE: Insert de variável em tabela - PL SQL dúvida - JPedrosa - 15-09-2010 12:21

Depois de leres o campo.
Um ciclo que faça o substr do campo até à próxima virgula e guarda numa variavel.
A condição de fim de ciclo será chegares à última virgula ou não teres mais campos para ler.
Depois disso, meter as variaveis nos vários campos da tabela.

para pesquisares continuamente por virgulas, será guardar para uma variavel sempre o resultado de substr(Mensagem, 0,instr(Mensagem,',')) isto dá-te sempre tudo até à proxima virgula.
claro que convem testar primeiro se existe uma proxima virgula, que mais não é do que testar se o instr te devolve zero ou não.

Se trabalhares de forma mais "astuta" também podes fazer o ciclo só a perguntar À "Mensagem" quantas virgulas tem e em que posição (ciclo de instr) e depois de uma assentada fazeres os substring todos...

Para veres as funções que tens para jogar a nível de manipulaçao de strings, dá uma olhada neste site


RE: Insert de variável em tabela - PL SQL dúvida - JPedrosa - 15-09-2010 20:51

Então? Ficaste safo?