Tables externes sous Oracle

Table externe

Une table externe sous Oracle est une méthode d'accès sans copie à des fichiers CSV dynamiques exactement comme s'il s'agissait d'une table de la BD.

Préambule : Déclaration des répertoires de travail

CREATE OR REPLACE DIRECTORY <nom du répertoire source> AS '<chemin du répertoire de la source>';
CREATE OR REPLACE DIRECTORY <nom du répertoire log> AS '<chemin du répertoire des fichiers de log>';
Exemple de répertoire de travail

Accès aux répertoire de travail

Le répertoire de la source et le fichier source doivent être accessibles en lecture pour le processus Oracle.

Le répertoire des fichiers de log doit être accessible en lecture et écriture pour le processus Oracle.

« All directories are created in a single namespace and are not owned by an individual schema »

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5007.htm

Ne pas utiliser de commentaire au sein la déclaration des paramètres d'accès

« One important point to remember is that comments must be placed before any access parameters. If you include comments in the access parameter sections, Oracle will throw an error when you query the external table but not when you are creating it. »

https://oracleappsnotes.wordpress.com/2012/02/10/oracle-external-tables-a-few-examples/

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS '/user1c/nf26/nf26/projet/csv/';
CREATE OR REPLACE DIRECTORY monRepertoireLog AS '/volsme/user1x/uvs/nf26/nf26p099/test/';
/
CREATE TABLE tImport (
a VARCHAR(50),
b NUMBER(10)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY monRepertoireSrc
ACCESS PARAMETERS
(
RECORDS DELIMITED BY newline
SKIP 1
CHARACTERSET UTF8
BADFILE monRepertoireLog:'import.bad'
LOGFILE monRepertoireLog:'import.log'
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
)
LOCATION ('sources.csv'))
REJECT LIMIT UNLIMITED;

Vérification de la déclaration de la table externe

DESCRIBE Timport;
SELECT TABLE_NAME, TYPE_NAME, DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES;

Accès

SELECT * FROM Timport;

Gros fichiers

Si les volumes de donnée sont importants (s'il y a beaucoup de lignes), privilégiez l'usage de la clause ROWNUM pour éviter de faire transiter des méga-octets de données entre le serveur et le client. Les délais de réaction en seront améliorés.

Vous pouvez aussi utiliser des SUM, MIN, MAX, etc. pour être sûr que toutes les lignes et colonnes sont correctement lues.

Tout recompter

Une fois la procédure terminée effectuer un count(*) pour déterminer si l'import a bien traité toutes les lignes du fichier source.

Caractère de fin de ligne

AccueilZone E avec Oracle > Tables externes< PrécédentSuivant >