Ajuda - Cursor REF

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
mrj
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Seg, 16 Jan 2006 7:27 am
Localização: Rio de janeiro - RJ

Porque ocorre esse erro quando executo o pl abaixo?

Selecionar tudo

ORA-00972: IDENTIFIER IS TOO LONG.
A linha do erro é no OPEN FOR SELECT.....

Selecionar tudo

DECLARE

V_COLUNA  VARCHAR2(50):= 'COD_CLIENT_OLTP';
V_TABELA  VARCHAR2(50):= 'BI_CLIENT';
V_VALOR   VARCHAR2(20):= '10';

TEXTO     VARCHAR2(1000);
--
TYPE RC IS REF CURSOR;
C1   RC; 
--
BEGIN
   OPEN C1 FOR 'SELECT'|| V_COLUNA ||'FROM'|| V_TABELA ||'WHERE COD_CLIENT_DW = V_VALOR';
      -- USING V_VALOR;  -- BIND VARIABLE SE NECESSÁRIO 
   --OPEN C1 FOR SELECT COD_CLIENT_OLTP FROM BI_CLIENT WHERE COD_CLIENT_DW = 1000;
   
   DBMS_OUTPUT.PUT_LINE('HORA DA EXECUÇÃO: '|| TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS'));
   LOOP
      FETCH C1 INTO TEXTO;
         EXIT WHEN C1%NOTFOUND;
          
         DBMS_OUTPUT.PUT_LINE(TEXTO);   

   END LOOP;
   CLOSE C1;
   
END;
mello
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 06 Mar 2006 5:26 pm
Localização: sp

tenta assim:

Selecionar tudo

DECLARE 

V_COLUNA VARCHAR2(50):= 'COD_CLIENT_OLTP'; 
V_TABELA VARCHAR2(50):= 'BI_CLIENT'; 
V_VALOR VARCHAR2(20):= '10'; 

TEXTO VARCHAR2(1000); 
-- 
TYPE RC IS REF CURSOR; 
C1 RC; 
-- 
BEGIN 
OPEN C1 FOR 'SELECT '|| V_COLUNA ||' FROM '|| V_TABELA ||' WHERE COD_CLIENT_DW = :V_VALOR'
 USING V_VALOR; -- BIND VARIABLE SE NECESSÁRIO 
--OPEN C1 FOR SELECT COD_CLIENT_OLTP FROM BI_CLIENT WHERE COD_CLIENT_DW = 1000; 

DBMS_OUTPUT.PUT_LINE('HORA DA EXECUÇÃO: '|| TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS')); 
LOOP 
FETCH C1 INTO TEXTO; 
EXIT WHEN C1%NOTFOUND; 

DBMS_OUTPUT.PUT_LINE(TEXTO); 

END LOOP; 
CLOSE C1; 

END;

:D
guerton
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Ter, 26 Out 2004 12:44 pm
Localização: Sapiranga - Rs

Ola. Pelo que vi o problema realmente esta no open cursor...Veja
--

Selecionar tudo

OPEN C1 FOR 'SELECT'|| V_COLUNA ||'FROM'|| V_TABELA ||'WHERE COD_CLIENT_DW = V_VALOR'; 
--
você esqueceu de concatenar com a variavel..
--

Selecionar tudo

OPEN C1 FOR 'SELECT'|| V_COLUNA ||'FROM'|| V_TABELA ||'WHERE COD_CLIENT_DW = '||V_VALOR;
guerton
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Ter, 26 Out 2004 12:44 pm
Localização: Sapiranga - Rs

E atenção com um detalhe que esqueci de mensionar se seu campo é varchar devera ser concatenado com aspas
Ex.

Selecionar tudo

OPEN C1 FOR 'SELECT'|| V_COLUNA ||'FROM'|| V_TABELA ||'WHERE COD_CLIENT_DW = '''||V_VALOR||'''';
--
Acho que é isso... :lol:
Responder
  • Informação
  • Quem está online

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