Tables externes

De knowledge
Révision datée du 27 février 2025 à 22:23 par Jpinon (discussion | contributions) (Page créée avec « == Description == Permet depuis oracle d'accéder par SQL a des données stockées dans des fichier sur disque. Les données sont accessible en mode "read only". Pour modifier les données il faut modifier le fichier. === Format "SQL loader" === Les données sont stockées dans un fichier "plat". On peut définir librement le caractère de fin de champ et de fin de ligne. === Format datapump === Les données sont stockées dans un format propriétaire. '''Atten... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Description

Permet depuis oracle d'accéder par SQL a des données stockées dans des fichier sur disque.

Les données sont accessible en mode "read only". Pour modifier les données il faut modifier le fichier.

Format "SQL loader"

Les données sont stockées dans un fichier "plat". On peut définir librement le caractère de fin de champ et de fin de ligne.

Format datapump

Les données sont stockées dans un format propriétaire.

Attention ce format me semble incompatible avec les fichiers crées par les outils externes de datapump Data pump (impdp/expdp).

Création

Les fichiers devront être présent dans un répertoire définit dans oracle (exemple)

   CREATE DIRECTORY EXTERN_TABLES AS '/opt/datastore/datapump';
   GRANT READ, WRITE ON DIRECTORY EXTERN_TABLES to user;

Format "SQL loader"

On considère le fichier texte "nc.txt":

  001,Ouvea,20-39-08S,166-33-43E,98814
  002,Lifou,20-58-00S,167-14-00E,98820
  003,Tiga,21-06-25S,167-48-53E,98820
  004,Mare,21-31-00S,167-59-00E,98878
  005,Belep,19-45-00S,163-40-00E,98811
  006,Pins,22-37-00S,167-29-00E,98832

On le place dans le répertoire /opt/datastore/datapump (accessible par oracle). Et on entre la commande de création :

create table nc_ilds
  ( iuid               varchar2(3),
    name               varchar2(50),
    latitude   varchar2(12),
    longitude  varchar2(12),
    postal_code        varchar2(10)
  )
  organization external
  ( default directory EXTERN_TABLES
    access parameters
    ( records delimited by newline
      fields terminated by ','
    )
    location ('nc.txt')
);

On peut ensuite faire des requêtes sur cette nouvelle table:

SQL> select latitude,longitude from nc_ilds;
LATITUDE                             LONGITUDE
------------------------------------ ------------------------------------
20-39-08S                            166-33-43E
20-58-00S                            167-14-00E
21-06-25S                            167-48-53E
21-31-00S                            167-59-00E
19-45-00S                            163-40-00E
22-37-00S                            167-29-00E

6 rows selected.

Format datapump

On peut créer une table stockée dans un fichier au format propriétaire oracle a partir de données existant dans un table oracle (ou le résultat d'une requête complexe).

 create table export_ncilds
   organization external
   ( type oracle_datapump
     default directory EXTERN_TABLES
     location ('nc.dump')
   ) as select * from nc_ilds;

Ici j'ai utilisé la table nc_ilds crée plus haut dans l'article mais on peut remplacer le select par n'importe quelle requête.

La table export_ncilds est crées avec le résultat de la requete select * from nc_ilds.

On peut également aller consulter le fichier sur le serveur.

$ ls -l nc.dump
-rw-r----- 1 oracle oinstall 12288 Mar 24 16:29 nc.dump

Le fichier ainsi crée peut être déplacé sur un autre serveur et "monté" grâce à la commande.

create table nc_ilds
 ( iuid                varchar2(3),
   name                varchar2(50),
   latitude    varchar2(12),
   longitude   varchar2(12),
   postal_code varchar2(10)
 )
 organization external
 ( type oracle_datapump
    default directory EXTERN_TABLES
    location ('nc.dump')
  ) ;