O assunto de hoje sera sobre um interessante recurso disponivel no Oracle 10g: as tabelas externas. Como o nome diz, se trata de uma tabela ou arquivo que nao reside no banco de dados. Com esse recurso e possivel integrar diferentes bases e aplicacoes de forma simples e rapida. Usando recursos de paralelismo para geracao dos dados, ou fazendo select's com ordenacao envolvendo tabelas externas e tabelas nativas, insert's em tabelas da base atraves de select's em tabelas externas e por ae afora.Vamos a pratica.Criaremos um arquivo bancos.csv na pasta d:\oracle\externo, contendo o seguinte:237,Banco Bradesco1,Banco do Brasil S.A356, Santander Brasil2, Caixa Economica Federal424, Banco NoroesteImportante ressaltar que os arquivos devem estar no servidor onde roda o banco de dados, que nesse caso e windows.O proximo passo e criar uma referencia no BD para o diretorio onde esta o arquivo externo, atraves do comando create directory.Create or replace directory dir_ext as 'd:\oracle\externo';Create or replace directory dir_bad as 'd:\oracle\externo\bad';Create or replace directory dir_log as 'd:\oracle\externo\log';Supondo que temos um usuario financeiro, iremos conceder grant's de leitura e gravacao nesse diretorio para ele.grant read, write on directory dir_ext to financeiro;grant read, write on directory dir_bad to financeiro;grant read, write on directory dir_log to financeiro;Conn financeiro/financeiro;Agora vamos criar duas tabelas: Bancos_ext e Bancos.create table bancos(Banco_id number(4),Banco_nome varchar2(30));create table bancos_ext(Banco_id number(4),Banco_nome varchar2(30))organization external(type oracle_loader default directory dir_ext access parameters(records delimited by newlinebadfile dir_bad:'bancos%a_%p.bad'logfile dir_log:'bancos%a_%p.log'fields terminated by ','missing field values are null(banco_id,banco_nome))Location ('bancos.csv'))Parallelreject limit unlimited;Vamos analisar o comando:- Organization external: indica que se trata de uma tabela externa ao BD Oracle.- Type oracle_loader: a interface usada pra fazer a carga sera o oracle loader.- Default directory dir_ext access parameters: indica o diretorio onde esta o arquivo, nessecaso definido pelo objeto directory dir_ext.- Acces Parameters: Parametros de localizacao do arquivo no sistema operacional , badfiles,logfiles, etc;- Records delimitd by newline: o banco entendera que ao encontrar um fim de linha iraadicionar um novo registro na tabela.- Badfile dir_Bad: caso nao queira gerar badfile substitua por NOBADFILE;- Logfile dir_log: caso nao queira gerar log substitua por NOLOGFILE.Apos criar a tabelas, habilitamos o paralelismo para dml (operacoes de insert, delete e update), e em seguida executamos um insert na tabela bancos fazendo leitura na tabela externa.alter session enable parallel dml;insert into bancos(Banco_id,Banco_nome)Select * From bancos_ext;Vamos para o proximo caso. Join envolvendo uma tabela externa e uma tabela do DB.Select * from agencias a, bancos_ext bwherea.banco_id = b.banco_idand b.banco_id = 1;Limitacoes de uso de tabela externaEm uma tabela externa nao e possivel realizar uma operacao de DML (insert, delete e update), tampouco criar um indice, embora seja possivel fazer uma ordenacao.Nao e permitido tambem criar tabelas externas com campos do tipo clob, blob e long.Criacao de tabela externa usando datapump e paralelismoNesse exemplo criaremos uma tabela externa a partir de uma tabela do BD.Create agencias_ext (banco_id,agencia_id,endereco,numero,bairro,cidade,uf)Organization external(type oracle_datapumpdefault directory dir_extlocation ('agencias.csv'))parallel 4asselect banco_id,agencia_id,endereco,numero,bairro,cidade,uffrom agencias;Podemos ainda gerar os dados em multiplos diretorios simultaneamente:create or replace directory dir_ext_1 as 'd:\oracle\externo\dir1';create or replace directory dir_ext_2 as 'd:\oracle\externo\dir2';Create agencias_ext (banco_id,agencia_id,endereco,numero,bairro,cidade,uf)Organization external(type oracle_datapumpdefault directory dir_extlocation ('dir_ext_1:agencias.csv','dir_ext_2:agencias.csv'))parallel 2asselect banco_id,agencia_id,endereco,numero,bairro,cidade,uffrom agencias;E isso ai...[]'s Quer fazer um tour virtual por Paris