DBMS_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
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

Olá pessoal, dada a quantidade de dados muito grande no arquivo, estou tentando inserir ele em um campo CLOB, por exemplo:

Selecionar tudo

        DBMS_LOB.fileopen( arq, DBMS_LOB.FILE_READONLY );
        
        DBMS_LOB.loadfromfile(CLOB_LOC,arq,dbms_lob.getlength(arq));
        
        Dbms_Lob.FileClose ( arq );
ao efeutar o loadfromfile em uma variável CLOB_LOC do tipo clob ele me retorna o erro:

Selecionar tudo

9:52:49  Target session: ORA-06502: PL/SQL: erro: invalid LOB locator specified:

Selecionar tudo

select DIRECTORY_PATH from ALL_DIRECTORIES where DIRECTORY_NAME = 'DIR_TMP';
O diretório em que se encontra o arquivo a ser lido está corretamente inserido no ALL_DIRECTORIES e nãoo ocorre erro no Open, ele abre o arquivo normal e fecha, porém não carrega o conteudo do arquivo na variável CLOB.

Grato pela ajuda!

[]'s
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

Olá, criei uma função para ler o arquivo e ela está lendo na boa, se não fosse o problema de o Clob que me retorna não conter todo o conteúdo do arquivo... digamos que nem a metade...

Selecionar tudo

FUNCTION FLEARQUIVO( arq IN varchar2, dir IN varchar2 )
  RETURN clob IS
BEGIN
DECLARE
    arquivo BFILE;

    dest_clob   CLOB;
    dst_offset  number := 1 ;
    src_offset  number := 1 ;
    warning     number;
    
    BEGIN
        arquivo := BFILENAME( dir, arq );
        
        INSERT INTO test_clob(id, file_name, arquivo, timestamp)
        VALUES(1001, arq, empty_clob(), sysdate)
        RETURNING arquivo INTO dest_clob;
        
        DBMS_LOB.OPEN(arquivo, DBMS_LOB.LOB_READONLY);
        
        DBMS_LOB.LoadFromFile(
          DEST_LOB => dest_clob
        , SRC_LOB  => arquivo
        , AMOUNT   => DBMS_LOB.GETLENGTH( arquivo ) );
        
        DBMS_LOB.CLOSE( arquivo );
        
        commit;

        RETURN dest_clob;
    END;
END;
alguém sabe por que isso pode estar acontecendo? já que meu Amount é do Length do arquivo...

obrigado..

[]'s
Responder
  • Informação
  • Quem está online

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