首页 > 数据库 > Oracle > 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博客 ” ,链接:https://blog.itpub.net/29828180/viewspace-1258100/ ,如需转载,请注明出处,否则将追究法律责任。