Substr de um Lob

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
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

Fale Pessoal.
Este é meu problema.
To carregando uma tabela via sqlloader. Ela é composta de uma coluna BLOB e é alimentada por strings maiores que 4000 caracteres. Eu queria pergar os primeiros 4000. Tentei usar o substri do pacote dbms_lob, mas ele me mostra a verxão hexadecimal do blob. Segue exemplo com insert, ao invés de sqlldr para exemplificar.
Criação da tabela

Selecionar tudo

create table FT_FIRB46_coluna_unica(Coluna_Unica blob)
Inserção para simular o sqlldr... apresenta o mesmo erro

Selecionar tudo

insert into  FT_FIRB46_coluna_unica 
values (rawtohex('080625115704FIRN9000578901808063001RUR200806122008062520100610050000000000001400.00010000005833.3333330000000000000024P7                                                                                                                                                      N000000000000000000000180806122D33DI00000000A NRLL0000000024000000000024 000000000000000.0000000000  20080822000'))
Consulta com o substr do pacote dbms_lob

Selecionar tudo

select dbms_lob.substr(t.coluna_unica,4000,1), t.coluna_unica from FT_FIRB46_coluna_unica t
Como consigo os primeiros 4000 caracteres conforme incluidos na tabela?

Valeu
Alex
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Olá,

Você pode usar a função utl_raw.cast_to_varchar2():

Selecionar tudo

SQL> create table FT_FIRB46_coluna_unica(Coluna_Unica blob);
 
Table created
SQL> INSERT INTO ft_firb46_coluna_unica
  2  VALUES
  3    (rawtohex('080625115704FIRN9000578901808063001RUR200806122008062520100610050000000000001400.00010000005833.3333330000000000000024P7                                                                                                                                                      N000000000000000000000180806122D33DI00000000A NRLL0000000024000000000024 000000000000000.0000000000  20080822000'));
 
1 row inserted
SQL> select dbms_lob.substr(utl_raw.cast_to_varchar2(t.coluna_unica),4000,1), t.coluna_unica from FT_FIRB46_coluna_unica t;
 
DBMS_LOB.SUBSTR(UTL_RAW.CAST_T                                                   COLUNA_UNICA
-------------------------------------------------------------------------------- ------------
080625115704FIRN9000578901808063001RUR200806122008062520100610050000000000001400 <BLOB>
 
SQL> 
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

funcionou valeu
Responder
  • Informação
  • Quem está online

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