2009-10-27 69 views
2

我知道,你可以创建一个表导出这样的:在Oracle中,如何创建与现有表具有完全相同结构的外部表?

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

但我想进口做这样的事情,所以我可以用相同的结构创建一个外部导入表作为现有表,将数据加载到它中,然后执行一个简单的INSERT INTO/SELECT FROM查询以将数据移到那里。有没有办法做到这一点?

我已经试过这一点,但它不工作:

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

不过的了:

ORA-30657:不支持 外部组织表操作

回答

2

只需使用您的表格说明:

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 

要么从你的DDL存储库(你有一个不是你? :)或动态与DBMS_METADATA.get_ddl例如。

+0

是的,我们确实有一个,但是有太多的表我们正在用这个来手工制作每个表。 'DBMS_METADATA.get_ddl'也是一个很好的想法,但它似乎并不容易自动化。有没有另外一种方法来做到这一点,或者我只是要咬牙切齿地将PL/SQL块拼凑在一起以完成user_tab_cols的所有工作? – 2009-10-27 15:07:24

+1

这可能不是OP想要听到的答案 - 因为它涉及到额外的打字。当ORA-30657不适用于DATA \ _PUMP驱动程序时,使用ORACLE \ _LOADER驱动程序是令人沮丧的。 – APC 2009-10-27 15:15:13

相关问题