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 oracle_br@yahoogrupos.com.br, "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 oracle_br@yahoogrupos.com.br, "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 oracle_br@yahoogrupos.com.br, "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/oracle_br@yahoogrupos.com.br/
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

 



Responder a