Olá pessoal,

Preciso converter o conteúdo de um campo tipo LONG para VARCHAR2.
Estou ciente o campo do tipo VARCHAR2 é limitado, sendo que o campo 
do tipo LONG poderá ser maior que o tamanho máximo do VARCHAR2.
Encontrei na a seguinte função:
CREATE OR REPLACE FUNCTION LONG_TO_CHAR( IN_ROWID ROWID
                                       , IN_OWNER VARCHAR
                                       , IN_TABLE_NAME VARCHAR
                                       , IN_COLUMN VARCHAR2 ) 
                                  RETURN VARCHAR AS 
/*
CREATE BY: D.Jenkins
         Date: 28-Apr02003 

         Use:  Long to varchar2 conversion,
               to allow a substring on long column in the table; 
  
         Notes: 
         Errors out with varchar > 32767        
         ORA-06502: PL/SQL: numeric or value error: character string
            buffer too small 

         Synonyms and Grants:
         create public synonym LONG_TO_CHAR for
            synergen.CDBF_LONG_TO_CHAR; 
         grant execute as required 
         or
         grant execute long_to_char to public; 
            
*/
text_c1 varchar2(32767);
sql_cur varchar2(2000);
--
begin
  sql_cur := 'select '||in_column||' 
from'||in_owner||'.'||in_table_name||' where rowid ='||chr(39)
||in_rowid||chr(39);
  dbms_output.put_line (sql_cur);
  execute immediate sql_cur into text_c1;
  text_c1 := substr(text_c1, 1, 4000);
  RETURN TEXT_C1;  
END;

Crie ela no meu banco, e ao executá-la numa select é mostrada a 
seguinte mensagem:
ORA-00923: FROM keyword not found where expected
ORA-06512: at "NACOVOLO.LONG_TO_CHAR", line 33

O conteúdo da linha 33 da função é a seguinte:
execute immediate sql_cur into text_c1;

Meu banco é 10.2.0.1.0

Atribuições do owner da função:

Atribuição  Opção Admin    Default 
CONNECT     Y              Y 
DBA         Y              Y 

A select que executo é a seguinte:

select fila_eai.cdn_tipo_fila TIPO_FILA
     , fila_eai.cdn_tipo_mensagem TIPO_MENSAGEM
     , LONG_TO_CHAR( ROWID -- IN_ROWID
                   , 'EAIPORO8P964' -- IN_OWNER
                   , 'FILA_EAI' -- IN_TABLE_NAME
                   , 'DES_CONTEUDO' -- IN_COLUMN
                   ) DES_CONTEUDO
  from EAIPORO8P964.FILA_EAI where TRIM(FILA_EAI.U##DTA_GERACAO) IS 
NULL

Peço a gentileza da ajuda do pessoal da lista para que eu consiga 
converter um campo do tipo LONG para VARCHAR2 como retorno de uma 
select.

Agradeço a atenção de todos, e ficarei na expectativa de um breve 
retorno.

Nelson Antonio da Cruz Covolo





--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__________________________________________________________________
Seu banco Oracle retornou erro? Ora-??? Pesquise aqui: 
http://www.oraclebr.com.br/  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a