2009-10-27 2 views
2

Je sais que vous pouvez créer une table pour l'exportation comme ceci:Dans Oracle, comment créer une table externe ayant exactement la même structure qu'une table existante?

create table bulk_mbr organization external( 
type ORACLE_DATAPUMP 
default directory jason_home 
location ('mbr.dat')) 
as SELECT * FROM mbr; 

Mais je voudrais faire quelque chose comme ça pour les importations afin que je puisse créer une table d'importation externe avec la même structure que d'une table existante , chargez les données dedans, puis faites une simple requête INSERT INTO/SELECT FROM pour déplacer les données là-bas. Y a-t-il un moyen de faire cela?

J'ai essayé, mais ça ne marche pas:

create table bulk_mbr organization external( 
type ORACLE_LOADER 
default directory jason_home 
location ('mbr.dat')) 
as SELECT * FROM mbr where 1=0; 

mais nous avons eu:

ORA-30657: opération non prise en charge sur la table organisée externe

Répondre

2

il suffit d'utiliser votre description de la table:

SQL> CREATE TABLE bulk_mbr (
    2  ID NUMBER, 
    3  d VARCHAR2(4000) 
    4 ) 
    5 ORGANIZATION EXTERNAL (
    6  TYPE ORACLE_LOADER 
    7  DEFAULT DIRECTORY jason_home 
    8  LOCATION ('mbr.dat') 
    9 ); 

Table created 

Soit à partir de votre dépôt DDL (vous en avez un non? :) ou dynamiquement avec DBMS_METADATA.get_ddl par exemple.

+0

Oui, nous en avons un, mais il y a simplement trop de tables avec lesquelles nous fabriquons manuellement chaque table. 'DBMS_METADATA.get_ddl' est également une bonne idée, mais il ne semble pas que ce soit facile à automatiser. Y a-t-il un autre moyen de le faire, ou est-ce que je vais juste devoir mordre la balle et bidouiller un bloc PL/SQL pour faire tout cela depuis user_tab_cols? –

+1

Ce n'est probablement pas la réponse que le PO veut entendre - car cela implique une saisie supplémentaire. Et il est frustrant que ORA-30657 démarre avec le pilote ORACLE \ _LOADER quand il ne s'applique pas au pilote DATA \ _PUMP. – APC

Questions connexes