Neste
artigo será demonstrado como permitir que
tabelas externas possam ler colunas contendo dados do tipo CLOB e BLOB
para as operações de carga.
[Conceito]
Tabelas externas:
Dispositivo no banco de dados Oracle que permite acessar fontes externas
(arquivos textos) e carregá-las para dentro do banco de dados.
Para a demonstração deve-se criar um
diretório, apontando para a “filesystem” no sistema operacional, usar o comando
abaixo:
SQL> CREATE OR REPLACE DIRECTORY table_load AS
'/tmp/';
Directory
created.
Nota:
Não se esquecer de conceder os privilégios de “READ” e “WRITE” para o usuário
manipular os arquivos no diretório criado, usar:
SQL> GRANT READ, WRITE ON DIRECTORY ON table_load
TO [USUARIO];
Abaixo estão os arquivos que serão
utilizados, estes, deverão ser colocados no caminho indicado na “filesystem”
onde o diretório foi criado.
Os
dois primeiros arquivos (*.txt) estão no formato texto simples, foram criados
utilizando o editor de texto VI ou mesmo o Notepad. Os dois arquivos seguintes
(*.doc) foram criado utilizando o editor de texto, utilizando o Microsoft Word
Documents. Os documentos contêm dados do tipo CLOB e BLOB para serem lidos
utilizando uma tabela externa “external table”.
A seguir deve-se criar o arquivo
“teste_lobs.txt” que terá o conteúdo indicado abaixo. Informações regulares,
datas e referências de arquivos contendo os tipos CLOB e BLOB.
1,um,15-FEB-2013,teste1clob.txt,teste1blob.doc
2,dois,16-FEB-2013,teste2clob.txt,teste2blob.doc
Agora que os todos
os arquivos estão no diretório indicado, a tabela
externa será criada para realizar a leitura dos dados.
SQL> DROP TABLE teste_external_lob_tab;DROP TABLE teste_external_lob_tab
*
ERROR at line 1:
ORA-00942: table or view does not existSQL> CREATE TABLE teste_external_lob_tab(
2 number_content NUMBER(10),
3 varchar2_content VARCHAR2(100),
4 date_content DATE,
5 clob_content CLOB,
6 blob_content BLOB
7 )
8 ORGANIZATION EXTERNAL
9 (TYPE ORACLE_LOADER
10 DEFAULT DIRECTORY table_load
11 ACCESS PARAMETERS
12 (RECORDS DELIMITED BY NEWLINE
13 BADFILE table_load:'teste_external_lob_tab_%a_%p.bad'
14 LOGFILE table_load:'teste_external_lob_tab_%a_%p.log'
15 FIELDS TERMINATED BY ','
16 MISSING FIELD VALUES ARE NULL
17 (number_content CHAR(10),
18 varchar2_content CHAR(100),
19 date_content CHAR(11) DATE_FORMAT DATE MASK "DD-MON-YYYY",
20 clob_filename CHAR(100),
21 blob_filename CHAR(100)
)
22 COLUMN TRANSFORMS (clob_content FROM LOBFILE (clob_filename) FROM (teste_external_lob_tab) CLOB, blob_content FROM LOBFILE (blob_filename) FROM (teste_external_lob_tab) BLOB)
23 )
24 LOCATION ('teste_lobs.txt')
25 )
26 PARALLEL 2
27 REJECT LIMIT UNLIMITED
28 /
Algumas notas importantes sobre tabelas externas utilizando colunas CLOB e
BLOB’s:
§
Os nomes das colunas dos tipos de dados LOB (blob_filename e clob_filename), não devem coincidir com os nomes das
colunas (blob_content e clob_content). Este dispositivo é utilizado para acessar os arquivos de dados que contém
os dados reais (, para apenas nomes de arquivos onde os dados podem ser encontrados.
§ A cláusula COLUMN
TRANSFORMS, indicará que as colunas contendo os tipos de dados CLOB e BLOB’s serão
carregadas apartir dos arquivos indicados. Para este exemplo será
utilizado uma coluna do arquivo para identificar o nome do arquivo e uma constante para o nome
do diretório. Para carregar dados a partir de vários diretórios usar um campo adicional no arquivo de dados para identificar objeto de diretório.
A consulta
abaixo irá mostrar os dados da tabela externa estão
corretamente referenciados tanto
os dados regulares quanto os dados do tipo LOB.
COLUMN date_content FORMAT A12
COLUMN clob_content FORMAT A25
SELECT number_content,varchar2_content,
TO_CHAR(date_content, 'DD-MON-YYYY') AS date_content,
clob_content, DBMS_LOB.getlength(blob_content) AS blob_length
FROM teste_external_lob_tab;
NUMBER_CONTENT VARCHAR2_CONTENT DATE_CONTENT CLOB_CONTENT BLOB_LENGTH-------------- ---------------- ------------ ------------------------ -----------
1 um 15-FEB-2013 Teste 01 coluna CLOB *** 22016
2 dois 16-FEB-2013 Teste 02 coluna CLOB *** 22016
2 rows selected.
Para mais informações sobre tabelas externas acessar, tabelas externas no Oracle. (2011).
MSc. Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com