Ler Arquivo em campo CLOB
Algumas vezes precisamos ler determinados arquivos texto com uma grande quantidade de caracteres, que não seja suportada pelos campos VARCHAR2 então recorremos ao campo CLOB que pode armazenar grandes quantidades de caracteres, então devemos criar um ponteiro para o diretório do arquivo dentro do Oracle:
INSERT INTO ALL_DIRECTORIES (DIRECTORY_PATH, DIRECTORY_NAME) VALUES ('TEU_PATH', 'TEU_ATALHO');
Crie uma tabela onde poderão ser armazenados os dados:
CREATE TABLE TEST_CLOB
(
ID NUMBER(15),
FILE_NAME VARCHAR2(1000 BYTE),
ARQUIVO CLOB,
TIMESTAMP DATE
);
Depois criamos a função:
-- arq : Nome do arquivo
-- dir : Nome da ponte criada na tabela ALL_DIRECTORIES
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;
[]'s