Valeu CHiappa !
Esta procedure de exemplo me deu uma boa ideia do que posso fazer !
[]s
Leticia

-----Mensagem original-----
De: jlchiappa [mailto:[EMAIL PROTECTED]
Enviada em: quinta-feira, 11 de agosto de 2005 10:13
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: LONG


** nenhuma ** : é restrição documentada que o cacareco dos LONGs não 
podem servir de parãmetro pras funções built-ins, não podem ser parte 
de WHERE, necessariamente tão SEMPRE no mesmo bloco que os dados 
atulhando tudo....

SE é LONG mesmo (e não LONG RAW !!) : se o long é menor que 32 Kb, vc 
pode carrega-lo numa variável PL/SQL, aí vc o manipula normalmente, 
senão vc teria que ler por pedaços, via DBMS_SQL, tipo assim (código 
adaptado do http://asktom.oracle.com) :

==> LONGs de qquer tamanho

create or replace procedure showlong( p_query in varchar2,
                                      p_name  in varchar2,
                                      p_value in varchar2 )
as
    l_cursor    integer default dbms_sql.open_cursor;
    l_n         number;
    l_long_val  varchar2(250);
    l_long_len  number;
    l_buflen    number := 250;
    l_curpos    number := 0;
begin
    dbms_sql.parse( l_cursor, p_query, dbms_sql.native );
    dbms_sql.bind_variable( l_cursor, p_name, p_value );

    dbms_sql.define_column_long(l_cursor, 1);
    l_n := dbms_sql.execute(l_cursor);

    if (dbms_sql.fetch_rows(l_cursor)>0)
    then
        loop<B>
            dbms_sql.column_value_long(l_cursor, 1, l_buflen, 
                                       l_curpos , l_long_val,
                                       l_long_len );</B>
            l_curpos := l_curpos + l_long_len;
            dbms_output.put_line( l_long_val );
            exit when l_long_len = 0;
      end loop;
   end if;
   dbms_output.put_line( '====================' );
   dbms_output.put_line( 'Long was ' || l_curpos || 
                         ' bytes in length' );
   dbms_sql.close_cursor(l_cursor);
exception
   when others then
      if dbms_sql.is_open(l_cursor) then
         dbms_sql.close_cursor(l_cursor);
      end if;
      raise;
end showlong;
/


==> isso poderia ser usado no sqlplus (por exemplo ) :

set echo on
begin
    showlong( 'select text from all_views where view_name = :x', 
':x', 'ALL_VIEWS' );
end;
/
set echo off


==> exemplo de carga de LONG numa variável PL/SQL :

create or replace procedure longsubstr( p_rowid in rowid,
                                        p_from  in number,
                                        p_for   in number )
return varchar2
as
   l_tmp long;
begin
   select LONG_COLUMN into l_tmp from T where rowid = p_rowid;

   return substr( l_tmp , p_from, p_for );
end;
/



[]s

 Chiappa
--- Em oracle_br@yahoogrupos.com.br, "Leticia Souza" <[EMAIL PROTECTED]> 
escreveu
> 
> Pessoal,
> Que função posso utilizar para procurar uma string dentro de um 
campo long ?
> Banco versão 8.1.7
> 
> Leticia




______________________________________________________________________

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




 




______________________________________________________________________

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