oracle复制另外一张表结构到一张新表中

oracle复制另外一张表结构到一张新表中

create table newtable as select * from oldtable where 1=2


这个sql只是把表结构copy过来  如果要把所有表结构和表数据都copy过来的话用下面的sql

create table newtable as select * from oldtable

Oracle中,如何能够快速的复制一个表的结构,包括字段定义、默认值、约束、主键、索引等。
例如:
  表tab_xxx包含N个字段,某些字段是非空的,某些字段是有默认值的,且有一个索引i_tab_xxx
  现在想创建表tab_yyy和tab_zzz,需要这两个表与tab_xxx有相同的字段定义以及各种约束条件,且他们也有相似的索引i_tab_yyy和i_tab_zzz。

写存储过程到各个字典表中取出表的定义信息实在费事,oracle有没有提供相似功能的package?
或者各位大侠有没有现成的东西分享?


toad F4

  或

  plsql developer   view/edit  -> view sql


  要是指量的话,写个procedure也行
  


--create or replace directory DATA_PUMP_DIR as '/home/oracle/admin/RT/dpdump';
--grant read,write on directory DATA_PUMP_DIR to public;
procedure sp_export_ddl_table(p_table_name VARCHAR2,p_file_name VARCHAR2)
is
  v_file          UTL_FILE.file_type;
  v_buffer        VARCHAR2(32767);
  v_amount        BINARY_INTEGER := 1024;
  v_pos           INTEGER :=1;
  v_clob          CLOB;
  v_clob_length   INTEGER;

BEGIN
  
  SELECT dbms_metadata.get_ddl(upper('table'),p_table_name)||';'
    INTO v_clob
    FROM dual;
    
  v_clob_length := dbms_lob.getlength(v_clob);
  v_file := UTL_FILE.FOPEN('DATA_PUMP_DIR',p_file_name||'.sql','a',32767);
  
  WHILE v_pos < v_clob_length LOOP
    dbms_lob.read(v_clob,v_amount,v_pos,v_buffer);
    UTL_FILE.put(v_file,v_buffer);
    v_pos := v_pos + v_amount;
  END LOOP;
  
  UTL_FILE.FCLOSE(v_file);
  
END sp_export_ddl_table;  
    
    

--将一个用户下所有表的定义SQL输出到文件中
procedure sp_export_ddl_user (p_owner_name VARCHAR2 DEFAULT USER)
is
BEGIN
  FOR rec in (select table_name from user_tables ) LOOP
     sp_export_ddl_table(rec.table_name,p_owner_name);
  END LOOP;
END;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29828180/viewspace-1258100/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29828180/viewspace-1258100/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值