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.
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:
01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. | >>>>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:
01. 02. 03. 04. 05. | 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:
01. 02. 03. 04. 05. 06. | 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
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
0 comentários:
Postar um comentário