Cursor dinâmico - erro select (esperava date obteve number)

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
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Olá,

Criei o cursor abaixo para testar o cursor dinâmico.

Selecionar tudo

create or replace
PROCEDURE MosTabCurDim is
  type tpTeste is REF CURSOR;
  CurExemplo  tpTeste;
  vid number;
  vSQL VARCHAR2(255);
  vdata date;
begin
  select sysdate into vdata from dual;
  vSQL := 'SELECT id, data from TestaCursorDinamico where to_data < ' || vdata;
  open CurExemplo for vSQL;
  loop
    fetch CurExemplo into vid, vdata;
    exit when CurExemplo%notfound;
    DBMS_OUTPUT.PUT_LINE(VID || ' - ' || VDATA);
  end loop;
  close CurExemplo;
end MosTabCurDim;
Esta com erro na linha 10, é a linha do select.

Selecionar tudo

  ORA-00932: tipos de dados inconsistentes: esperava DATE obteve    NUMBER
ORA-06512: em "SYSTEM.MOSTABCURDIM", line 10
ORA-06512: em line 2
O campo data é do tipo date.
Já coloquei assim:

Selecionar tudo

  vSQL := 'SELECT id, data from TestaCursorDinamico where to_date(data, ''DD/MM/YYYY'') < ' || vdata;
ou

Selecionar tudo

  vSQL := 'SELECT id, data from TestaCursorDinamico where data < ' || to_date(vdata, ''DD/MM/YYYY'') ;
ou

Selecionar tudo

  vSQL := 'SELECT id, data from TestaCursorDinamico where to_date(data, ''DD/MM/YYYY'') < ' || to_date(vdata, ''DD/MM/YYYY'') ;

Mas o erro continua.
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Acredito que seja a falta de aspas na data

Selecionar tudo

SELECT id, data from TestaCursorDinamico where DATA <  08/08/11 
Mas como colocar as aspas para ficar assim:

Selecionar tudo

SELECT id, data from TestaCursorDinamico where DATA <  '08/08/11'
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Resolvido :

Selecionar tudo

vSQL := 'SELECT id, data from TestaCursorDinamico where DATA < ' || ''' ' || vdata || ''' ';
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante