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/