A partir do Oracle 9i foi criado o conceito de EXTERNAL TABLES, ou seja, você cria uma tabela baseado num arquivo texto no sistema operacional e pode fazer consultas SQL nessa tabela (ou seja, diretamente no arquivo texto como se fosse uma tabela)
Agora a partir do oracle 10g é possível também criar um arquivo texto baseado numa tabela do banco usando o novo driver de Data Pump existente.
A possibilidade de gravar um arquivo texto se limita ao CREATE TABLE AS SELECT apenas. Não é permitido fazer UPDATE, DELETE ou INSERT numa external table.
Vamos a um exemplo:
SQL> CREATE DIRECTORY external_directory AS 'c:\oracle\admin\betatwo\directory'; SQL> GRANT READ, WRITE ON DIRECTORY external_directory TO scott; SQL> CREATE TABLE emp_history_ext (ename, retire_date, last_retirement_pay_date, pay_amount) ORGANIZATION EXTERNAL ( TYPE oracle_datapump DEFAULT DIRECTORY external_directory LOCATION ('emp_history_01.exp', 'emp_history_02.exp') ) parallel AS SELECT a.ename, b.retire_date, b.last_retirement_pay_date, b.pay_amount FROM emp a, retire_pay b WHERE a.empno=b.empno;
Primeiramente, criamos um DIRECTORY e damos permissão de leitura e escrita. Isso apenas é requerido caso o usuário que criou o diretório não é o usuário que vai criar a external table. Após isso, criamos uma external table que será populada com o SELECT informado!
Após a criação, basta fazer a consulta diretamente no arquivo texto:
SQL> SELECT * FROM emp_history_ext; ENAME RETIRE_DA LAST_RETI PAY_AMOUNT ---------- --------- --------- ---------- SMITH 25-NOV-03 15-DEC-03 1000
A criação dessa external table resulta na criação de um arquivo texto no sistema operacional com os dados informados no SELECT. Também é gerado um arquivo de LOG no mesmo diretório:
C:\> dir c:\oracle\admin\betatwo\directory Volume in drive C has no label. Volume Serial Number is 3CE9-7321 Directory of c:\oracle\admin\betatwo\directory 12/15/2003 07:52 PM 90 EMP_HISTORY_EXT_2528_1760.log 12/15/2003 07:52 PM 1,808 emp_history.exp
Outras informações:
Quando você dropa uma external table os arquivos textos continuam no sistema operacional! Isso pode ser um problema pois caso você execute novamente o comando pra recriar a external table, os arquivos já existirão e ocasionará um ERRO. Você deve excluir esses arquivos manualmente.