Olá,
C:\>sqlplus system/*****
SQL*Plus: Release 11.1.0.6.0 - Production on Sab Dez 5 13:15:32 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter utl_file_dir
NAME TYPE VALUE
----------------------------- ----------- ----------------------------
utl_file_dir string /tmp
-- Gerando o arquivo de texto externo ao banco de dados
SQL> declare
2 v_arquivo utl_file.file_type;
3 begin
4 v_arquivo := utl_file.fopen('/tmp', 'arq_teste.txt', 'W');
5 utl_file.put_line(v_arquivo, 'linha 1');
6 utl_file.put_line(v_arquivo, 'linha 2');
7 utl_file.put_line(v_arquivo, 'linha 3');
8 utl_file.put_line(v_arquivo, 'linha 4');
9 utl_file.put_line(v_arquivo, 'linha 5');
10 utl_file.fclose(v_arquivo);
11 exception
12 when utl_file.invalid_path then
13 raise_application_error(-20000, 'Atenção! O caminho informado não existe.');
14 end;
15 /
Procedimento PL/SQL concluído com sucesso.
[oracle@linux tmp]$ ls -l
total 8
-rw-r--r-- 1 oracle oinstall 40 Dez 5 13:16 arq_teste.txt
[oracle@linux tmp]$ cat arq_teste.txt
linha 1
linha 2
linha 3
linha 4
linha 5
-- Lendo o conteúdo do arquivo de texto gerado
SQL> set serveroutput on
SQL> declare
2 v_linha varchar2(2000) := '';
3 v_arquivo utl_file.file_type;
4 begin
5 v_arquivo := utl_file.fopen('/tmp', 'arq_teste.txt', 'R');
6 loop begin
7 utl_file.get_line(v_arquivo, v_linha);
8 dbms_output.put_line('linha lida=' || v_linha);
9 exception
10 when no_data_found then
11 utl_file.fclose(v_arquivo);
12 exit;
13 end;
14 end loop;
15 end;
16 /
linha lida=linha 1
linha lida=linha 2
linha lida=linha 3
linha lida=linha 4
linha lida=linha 5
Procedimento PL/SQL concluído com sucesso.
utl_file_dir="/u02/oradata/prod/utl_dir/"
utl_file_dir="/u03/oradata/prod/utl_dir/"
SQL> create or replace directory arquivo_dir as '/tmp';
Diretório criado.
grant read, write on directory [nome_diretorio] to [usuarios...];
-- Gerando o arquivo de texto externo ao banco de dados
SQL> declare
2 v_arquivo utl_file.file_type;
3 begin
4 v_arquivo := utl_file.fopen('ARQUIVO_DIR', 'arq_teste.txt', 'W');
5 utl_file.put_line(v_arquivo, 'linha 1');
6 utl_file.put_line(v_arquivo, 'linha 2');
7 utl_file.put_line(v_arquivo, 'linha 3');
8 utl_file.put_line(v_arquivo, 'linha 4');
9 utl_file.put_line(v_arquivo, 'linha 5');
10 utl_file.fclose(v_arquivo);
11 exception
12 when utl_file.invalid_path then
13 raise_application_error(-20000, 'Atenção! O diretório informado não existe.');
14 end;
15 /
Procedimento PL/SQL concluído com sucesso.
-- Lendo o conteúdo do arquivo de texto gerado
SQL> set serveroutput on
SQL> declare
2 v_linha varchar2(2000) := '';
3 v_arquivo utl_file.file_type;
4 begin
5 v_arquivo := utl_file.fopen('ARQUIVO_DIR', 'arq_teste.txt', 'R');
6 loop begin
7 utl_file.get_line(v_arquivo, v_linha);
8 dbms_output.put_line('linha lida=' || v_linha);
9 exception
10 when no_data_found then
11 utl_file.fclose(v_arquivo);
12 exit;
13 end;
14 end loop;
15 end;
16 /
linha lida=linha 1
linha lida=linha 2
linha lida=linha 3
linha lida=linha 4
linha lida=linha 5
Procedimento PL/SQL concluído com sucesso.
SQL> declare
2 v_arquivo utl_file.file_type;
3 begin
4 v_arquivo := utl_file.fopen('ARQUIVO_DIR_ERRO', 'arq_teste.txt', 'W');
5 utl_file.put_line(v_arquivo, 'linha 1');
6 utl_file.put_line(v_arquivo, 'linha 2');
7 utl_file.put_line(v_arquivo, 'linha 3');
8 utl_file.put_line(v_arquivo, 'linha 4');
9 utl_file.put_line(v_arquivo, 'linha 5');
10 utl_file.fclose(v_arquivo);
11 exception
12 when utl_file.invalid_path then
13 raise_application_error(-20000, 'Atenção! O diretório informado não existe.');
14 end;
15 /
declare
*
ERRO na linha 1:
ORA-20000: Atenção! O diretório informado não existe.
ORA-06512: em line 13
-- Criando o usuário de teste
SQL> create user scott identified by tiger
2 default tablespace users
3 quota unlimited on users;
Usuário criado.
-- Concedendo privilégios básicos
SQL> grant create session,create table, create procedure to scott;
Concessão bem-sucedida.
-- Concedendo privilégios para uso do diretório
SQL> grant read, write on directory ARQUIVO_DIR to scott;
Concessão bem-sucedida.
SQL> select grantor,grantee,table_name,privilege
2 from
3 all_tab_privs
4 where table_name = 'ARQUIVO_DIR';
GRANTOR GRANTEE TABLE_NAME PRIVILEGE
------------------- -------------------- ---------------------- ----------------------
SYS SYSTEM ARQUIVO_DIR EXECUTE
SYS SYSTEM ARQUIVO_DIR READ
SYS SYSTEM ARQUIVO_DIR WRITE
SYSTEM SCOTT ARQUIVO_DIR READ
SYSTEM SCOTT ARQUIVO_DIR WRITE
-- Conectando com o usuário SCOTT
SQL> connect scott/tiger
Conectado.
-- Criando a tabela de teste
SQL> create table tab_imagem (
2 id number primary key,
3 nome varchar2(20),
4 imagem blob
5 );
Tabela criada.
-- Listando o arquivo que será carregado para a tabela tab_imagem
[oracle@linux tmp]$ ls -l
total 4
-rw-r--r-- 1 oracle oinstall 809 Dez 5 13:25 imagem.jpg
-- Criando a stored procedure carrega_imagem
SQL> create or replace procedure carrega_imagem (p_nome_arquivo in tab_imagem.nome%type) as
2 v_bfile bfile;
3 v_blob blob;
4 begin
5 insert into tab_imagem (id,nome,imagem)
6 values (1,p_nome_arquivo,empty_blob())
7 return imagem into v_blob;
8 v_bfile := bfilename('ARQUIVO_DIR',p_nome_arquivo);
9 dbms_lob.fileopen(v_bfile, dbms_lob.file_readonly);
10 dbms_lob.loadfromfile(v_blob,v_bfile,dbms_lob.getlength(v_bfile));
11 dbms_lob.fileclose(v_bfile);
12 commit;
13 end;
14 /
Procedimento criado.
-- Carregando o arquivo para a tabela tab_imagem
SQL> execute carrega_imagem('imagem.jpg');
Procedimento PL/SQL concluído com sucesso.
-- Verificando o tamanho (em bytes) do arquivo carregado
SQL> select dbms_lob.getlength(imagem) from tab_imagem;
DBMS_LOB.GETLENGTH(IMAGEM)
--------------------------
809
SQL> exit
Desconectado de Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@linux tmp]$ ls -l
total 4
-rw-r--r-- 1 oracle oinstall 809 Dez 5 13:25 imagem.jpg
-- Utilizando o SQL*Plus da versão 10g
C:\>sqlplus scott/tiger
SQL*Plus: Release 10.2.0.4.0 - Production on Sab Dez 5 13:28:19 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from tab_imagem;
SP2-0678: Coluna ou tipo de atributo não pode ser exibido pelo SQL*Plus
-- Utilizando o SQL*Plus da versão 11g
C:\>sqlplus scott/tiger
SQL*Plus: Release 11.1.0.6.0 - Production on Sab Dez 5 13:32:06 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from tab_imagem;
ID NOME IMAGEM
---------- ---------------- ------------------------------------------------------------
1 imagem.jpg 47494638396109000600F70000000000B1B1B1AFAFAFA3A3A39999997777
777171716B6B6B5555554B4B4B3F3F3F3D3D3DEEEEEE3B3B3B3333332727
27CCCCCC191919171717111111C0C0C00D0D0D090909070707AAAAAAA4A4
A49696968A8A8A8888887070706868686666666060605E5E5E5C5C5C5858
58FFFFFF4848484444444040403838383232322E2E2EDDDDDD2828282626
262424242222221E1E1E181818141414121212101010BBBBBB080808B3B3
B30000000000000000000000000000000000000000000000000000000000
262424242222221E1E1E181818141414121212101010BBBBBB080808B3B3
000000000000000000000000000000000000000000000000000000000000
262424242222221E1E1E181818141414121212101010BBBBBB080808B3B3
777171716B6B6B5555554B4B4B3F3F3F3D3D3DEEEEEE3B3B3B3333332727
262424242222221E1E1E181818141414121212101010BBBBBB080808B3B3
000000000000000000000000000000000000000000000000000000000000
A49696968A8A8A8888887070706868686666666060605E5E5E5C5C5C5858
262424242222221E1E1E181818141414121212101010BBBBBB080808B3B3
777171716B6B6B5555554B4B4B3F3F3F3D3D3DEEEEEE3B3B3B3333332727
A49696968A8A8A8888887070706868686666666060605E5E5E5C5C5C5858
000000000000000000000000000000000000000000000000000000000000
262424242222221E1E1E181818141414121212101010BBBBBB080808B3B3
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
A49696968A8A8A8888887070706868686666666060605E5E5E5C5C5C5858
777171716B6B6B5555554B4B4B3F3F3F3D3D3DEEEEEE3B3B3B3333332727
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
002C000000000900060000080E0049081C48B0A0C1830813260C08003B00










