Query Dinamica com filtro em uma table(records).

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

Senhores, boa tarde.

Tenho uma procedure que é executa no filtro da tela, onde é montada uma query dinâmica pra atender os campos que são enviados ou no no filtro.

Dentro do rec de entrada CT.REC_GERAL, mapeado pela P_GERAL , existe uma table t_servico, preciso fazer um subselect nessa t_servico pra conseguir filtrar o que foi enviado na entrada, estou montando assim:

Selecionar tudo

PROCEDURE SP_BUSCAR_GERAL(P_GERAL IN CT.REC_GERAL,
                                                P_ERRO   OUT NUMBER) IS

  V_SQL VARCHAR2(30000);

 BEGIN
      V_SQL := ' SELECT  C.ID,
                                   C.NM
                    FROM CT.TB_GERAL   C
                   WHERE C.ID = 10';

   IF (P_GERAL.t_servico.COUNT > 0 ) THEN
      V_SQL := V_SQL || ' AND C.ID_SER IN ( SELECT ID_SER';
      V_SQL := V_SQL || '     FROM table (P_GERAL .t_servico ))';
   END IF;

 OPEN C_OUT_RES FOR V_SQL;
.....segue a implementação

Imprimi e a query esta sendo montada assim

Selecionar tudo

SELECT  C.ID, C.NM
  FROM CT.TB_GERAL   C
          WHERE C.ID = 10
               AND C.ID_SER IN ( SELECT ID_SER FROM table (P_GERAL .t_servico ))
se eu executo no sql_window do pl/sql developer ele não da problema de sintaxe, mas claro que não encontra a tabela (P_GERAL .t_servico).

O erro acontece quando executo pelo teste do pl_sql, ele fala que a Referência para coleta não inicializada.

Eu não consigo montar esse subselect numa table(record), que esta dentro do rec de entrada e vem preenchida pela entrada da proc?

Desde já agradeço.
Responder
  • Informação