Erro ao executar select dinâmico

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
edixsantos
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 24 Dez 2008 3:32 pm
Localização: Osasco

O type não recebe os dados da query dinâmica, ocorre uma erro de referência .
Se eu utilizar variáveis funciona corretamente.

Como corrigir o código abaixo para que o type receba os da da que query?

Selecionar tudo

CREATE OR REPLACE PROCEDURE sel_dinamico(p_filtro1 number,
                                         p_filtro2 number) is
  v_ds_sql varchar2(1024);
  TYPE typmro_recempregadosp IS REF CURSOR;
  v_cr    typmro_recempregadosp;
  v_dados type_erro;
BEGIN
  v_ds_sql := '';
  v_ds_sql := v_ds_sql || 'SELECT a.codigo , ';
  v_ds_sql := v_ds_sql || '       a.sobrenome , ';
  v_ds_sql := v_ds_sql || '       a.nome , ';
  v_ds_sql := v_ds_sql || '       a.cod_usuario , ';
  v_ds_sql := v_ds_sql || '       a.dt_admissao, ';
  v_ds_sql := v_ds_sql || '       a.comentarios, ';
  v_ds_sql := v_ds_sql || '       a.cod_gerente, ';
  v_ds_sql := v_ds_sql || '       a.cargo, ';
  v_ds_sql := v_ds_sql || '       a.cod_depto, ';
  v_ds_sql := v_ds_sql || '       a.salario , ';
  v_ds_sql := v_ds_sql || '       a.pct_comissao , ';
  v_ds_sql := v_ds_sql || '       b.nome  ';
  v_ds_sql := v_ds_sql || 'FROM empregado a , ';
  v_ds_sql := v_ds_sql || '     departamento b ';
  v_ds_sql := v_ds_sql || 'WHERE a.cod_depto = b.codigo ';
  IF (p_filtro1 IS NOT NULL) THEN
    v_ds_sql := v_ds_sql || ' AND a.cod_depto > ' || '1 ';
  END IF;
  IF (p_filtro2 IS NOT NULL) THEN
    v_ds_sql := v_ds_sql || ' AND b.cod_regiao >= ' || '1 ';
  END IF;
  v_ds_sql := v_ds_sql || 'ORDER BY a.codigo ';
  v_dados.cd_codigo := 1234;
  DBMS_OUTPUT.put_line(v_ds_sql ||v_dados.cd_codigo );
  OPEN v_cr FOR v_ds_sql;
  LOOP
      FETCH v_cr
      INTO v_dados.cd_codigo,
           v_dados.ic_sobrenome,
           v_dados.ic_nome,
           v_dados.cd_usuario,
           v_dados.dt_dt_admissao,
           v_dados.cl_comentarios,
           v_dados.qt_cod_gerente,
           v_dados.ds_cargo,
           v_dados.qt_cod_depto, 
           v_dados.qt_salario,
           v_dados.ds_pct_comissao,
           v_dados.ds_nome_depto;
    EXIT WHEN v_cr%NOTFOUND;
   END LOOP;
  CLOSE v_cr;
END;

/*
  begin
  sel_dinamico(2,2);
  end;
  
   */
/
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, beleza?

Por acaso não se trata de um Datatype não identificado: type_erro.
Quem seria esse datatype?
Dê uma olhada se não lhe falta declaração.
Qualquer coisa, manda pra gente.
edixsantos
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 24 Dez 2008 3:32 pm
Localização: Osasco

com a sua dica
lembrei que tinha que inicializar o type

Selecionar tudo

v_dados := type_erro.autocreate;
aí rodou beleza.

valeu cara pela ajuda.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes