OK, agora que vc disse o que está usando, e onde, está mais claro,
posso entrar nos detalhes das opções que vc tem : antes porém um
aviso, LONGs são cheios de restrições, interferem em performance (já
que temos blocos de binários misturados com dados), se minimamente
possível (ie, SE vc tem permissão, SE as suas tools de programação
aceitam LOBs, SE vc tem o tempo requerido em caso de tabelas grandes,
etc) vc DEVERIA sim pensar em passar a usar LOBs, a conversão seria
algo tipo :
insert into tabeladest select to_lob( LONG_RAW_COLUMN ) from
tabelaorig where ....;
e aí sim vc poderia selecionar diretamente :
select utl_raw.cast_to_varchar2(dbms_lob.substr( x, 4000, 1 )) from
tabeladest;
Dito isto, pro caso dos LONGs temos que :
a) uma das restrições dos LONG RAWs é que eles NÂO podem participar
diretamente de comando na linguagem SQL, vc teria que usar
PL/SQL ,encapsulando numa function que retorna char e chamando a
function a partir do SQL, ou fazendo um cursor em PL/SQL
b) limites de datatypes : a linguagem SQL aceita no máximo 4kb como
textos, e PL/SQL no máximo 32 KB, as soluções que mostrarei estão
dentro destes limites, pra LONG RAW se vc precisar de mais do que
isso em PL/SQL (e portanto podendo encapsular em SQL) não vai ter
como, vc teria que fazer um programa externo em C ou Java
--> com os itens acima em mente, vamos em frente : se REALMENTE esse
binário seu possui textos, E não está compactado/criptografado, é
como eu disse extrair os caracteres dele usando a package UTL_RAW.
Essa package não é default, é um add-on, pra vc ver se ela está no
banco, conecta como SYS e pede um DESC UTL_RAW, se não aparecer vc a
tem que criar rodando no servidor Oracle localmente (conectado no
sqlplus como sys) os scripts d:\nnn\RDBMS\ADMIN\utlraw.sql e
d:\nnn\RDBMS\ADMIN\prvtrawb.plb , onde d:\nnn é o drive/diretório
onde o Oracle está instalado), aí sim poderemos a usar pra extrair
characters do raw. Finalmente segue o meu exemplo, já tendo a utl
criada, com usuário que tem execute nela, tendo textos menores que os
limites e portanto não precisando quebrar :
-> não tenho uma, vou criar uma tabela e popular :
[EMAIL PROTECTED]:SQL>create table TAB_RAW(c1 number, c2 long raw);
Tabela criada.
[EMAIL PROTECTED]:SQL>insert into TAB_RAW values(1, utl_raw.cast_to_raw
('texto de exemplo que será convertido pra raw!'));
1 linha criada.
[EMAIL PROTECTED]:SQL>commit;
Validação completa.
-> demonstrando que LONG RAW realmente não pode participar
diretamente :
[EMAIL PROTECTED]:SQL>select c1, utl_raw.cast_to_varchar2(c2) from TAB_RAW;
select c1, utl_raw.cast_to_varchar2(c2) from TAB_RAW
*
ERRO na linha 1:
ORA-00997: uso inválido do tipo de dados LONG
-> criando uma function pra encapsular :
[EMAIL PROTECTED]:SQL>create or replace function ACHA_RAW_RETORNA_CHAR(p1
number) return CHAR is
2 v_buffer long raw(4000);
3 BEGIN
4 select c2 into v_buffer from TAB_RAW where c1 = P1;
5 return utl_raw.cast_to_varchar2(v_buffer);
6* END;
[EMAIL PROTECTED]:SQL>/
Função criada.
[EMAIL PROTECTED]:SQL>select c1, ACHA_RAW_RETORNA_CHAR(c1) from TAB_RAW;
C1 ACHA_RAW_RETORNA_CHAR(C1)
------------------ --------------------------------------------
1 texto de exemplo que será convertido pra raw!
[EMAIL PROTECTED]:SQL>
[]s
Chiappa
--- Em [email protected], "Leonardo" <[EMAIL PROTECTED]>
escreveu
> Chiappa,
>
> Sou novato com Oracle e gostaria de agradecer a sua explicacao e de
> todos que me ajudaram ate hojem, MUITO OBRIGADO.
>
> Vamos lah.
>
> >==> SE vc ainda tiver dúvidas, diga EXATAMENTE
> qual ambiente de programação é? qual tool de programação?
> - ESTOU UTILIZANDO O SQL*PLU WORKSEHEET PARA A VISUALIZACAO DOS
DADOS.
> qual versão do banco?
> - ORACLE 8.1.7.0.0
> E diga exatamente o que contém esse binário que vc quer exibir?
> - NESTE BINARIO O CONTEUDO EH ALFA NUMERICO.
>
> Leonardo B.de Morais
>
>
> --- Em [email protected], "jlchiappa" <[EMAIL PROTECTED]>
> escreveu
> > Friend, a resposta só pode ser um sonoro ** DEPENDE ** : por
> > definição um LONG RAW ou um BLOB são binários, portanto podem
> conter
> > QUALQUER coisa - criptografada, não criptografada, em formato
> > qualquer.... O banco possui alguns add-ons que vc pode instalar
pra
> > fazer algumas conversões (como a package UTL_RAW, que pode
extrair
> os
> > caracteres exibíveis dum binário não-comprimido e não-encriptado,
> ou
> > o pacote intermedia, que consegue abrir alguns formatos
> específicos,
> > como .DOC, alguns gráficos, etc).
> > Além do que, vc AINDA tem a questão do AMBIENTE onde vc está
> > programando : sqlplus (por exemplo), por ser uma aplicação em
modo-
> > texto, é INCAPAZ de exibir binários de qquer tipo (no máximo
> strings
> > removidas dum binário), já o Oracle Developer (por exemplo)
> consegue
> > na boa exibir dados dum binário (nos formatos que ele reconhece).
> >
> > ==> SE vc ainda tiver dúvidas, diga EXATAMENTE qual ambiente de
> > programação é, qual tool de programação, qual versão do banco, E
> diga
> > exatamente o que contém esse binário que vc quer exibir, que quem
> > conhcecer pode te ajudar mais...
> >
> > []s
> >
> > Chiappa
> >
> > --- Em [email protected], "Leonardo" <[EMAIL PROTECTED]>
> > escreveu
> > > PessoALL,
> > >
> > > Tenho um campo do tipo LONG RAW, como faco para converter e
> > apresentar
> > > o conteudo dele em uma "Select".
> > >
> > > Quando coloco o campo diretamente ele apenas apresenta um
numero
> e
> > nao
> > > o conteudo.
> > > SELECT TL_OBSERVA FROM STL010
> > >
> > > Desde jah agradeco a todos pela ajuda.
> > >
> > > Leonardo
______________________________________________________________________
Histórico: http://www.mail-archive.com/[email protected]/
Falar com os Moderadores:([EMAIL PROTECTED])
Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar
______________________________________________________________________
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