如何生成oracle表的ddl語句

2021-10-24 18:13:46 字數 3561 閱讀 1725

有時候需要獲取指定表的ddl,開發人員經常會使用plsqldevolper去檢視表的定義,dba也可以使用dbms_metadata.get_ddl去查詢。但是這兩種方式只能看錶建表語句,乙個完整的表定義,至少要包括create table、comment、constraint、index。此時可以通過資料幫浦的方式來生成。

先導出表的元資料。建議按使用者匯出,後面需要哪些表的定義,再導成sql檔案時再過濾。

比如:

cat expdp_metadata_allusers_20200919.par

userid = "/ as sysdba"

directory = oggdmp

content = metadata_only

dumpfile=expdp_metadata_allusers_20200919.dmp

logfile = expdp_metadata_allusers_20200919.log

schemas=(user_a,

user_b)

cluster=n

expdp parfile=expdp_metadata_allusers_20200919.par

利用生成的expdp_metadata_allusers_20200919.dmp,我們可以把需要的表定義導成sql檔案。

impdp "'/ as sysdba'" directory=oggdmp dumpfile=expdp_metadata_table_20200924.dmp sqlfile=ddl_user_a.tab1.sql exclude=statistics,grant transform=segment_attributes:n tables=user_a.tab1

impdp "'/ as sysdba'" directory=oggdmp dumpfile=expdp_metadata_table_20200924.dmp sqlfile=ddl_user_b.tab2.sql exclude=statistics,grant transform=segment_attributes:n tables=user_b.tab2

再簡單過濾掉sql中的grep -v "connect" |grep -v "alter session" 行,我們就可以得到乙個完整的表定義檔案了。

-- new object type path: schema_export/table/table

create table "user_a"."tab1" 

(    "sn" number(5,0), 

"code" varchar2(80 char), 

"item_name_cn" varchar2(100 char), 

"item_name_cn_short" varchar2(50 char), 

"item_name_en" varchar2(200 char), 

"item_name_en_short" varchar2(100 char), 

"item_level" number(2,0), 

"parent_item_code" varchar2(80 char), 

"is_enable" char(1 char), 

"is_allow" char(1 char), 

"last_update_date" date default sysdate, 

"update_by" varchar2(50 char), 

"update_dept" varchar2(25 char), 

"serial_number" varchar2(40 char), 

"reserve2" varchar2(100 char), 

"reserve3" date, 

"reserve4" number(8,3)

) ;-- new object type path: schema_export/table/comment

comment on column "msapub_dict"."d_cb_berths"."sn" is '字典項序號';

comment on column "msapub_dict"."d_cb_berths"."code" is '字典項**';

comment on column "msapub_dict"."d_cb_berths"."item_name_cn" is '字典項名稱';

comment on column "msapub_dict"."d_cb_berths"."item_name_cn_short" is '字典項簡稱';

comment on column "msapub_dict"."d_cb_berths"."item_name_en" is '字典項英文名稱';

comment on column "msapub_dict"."d_cb_berths"."item_name_en_short" is '字典項英文簡稱';

comment on column "msapub_dict"."d_cb_berths"."item_level" is '字典項級別';

comment on column "msapub_dict"."d_cb_berths"."parent_item_code" is '字典項父項**';

comment on column "msapub_dict"."d_cb_berths"."is_enable" is '是否啟用(0否1是)';

comment on column "msapub_dict"."d_cb_berths"."is_allow" is '是否允許維護(0否,1是)';

comment on column "msapub_dict"."d_cb_berths"."last_update_date" is '更新時間(sysdate)';

comment on column "msapub_dict"."d_cb_berths"."update_by" is '更新人';

comment on column "msapub_dict"."d_cb_berths"."update_dept" is '建立/更新部門';

comment on column "msapub_dict"."d_cb_berths"."serial_number" is '編號';

comment on column "msapub_dict"."d_cb_berths"."reserve2" is '保留字段2';

comment on column "msapub_dict"."d_cb_berths"."reserve3" is '保留字段3';

comment on column "msapub_dict"."d_cb_berths"."reserve4" is '保留字段4';

comment on table "msapub_dict"."d_cb_berths"  is '泊位';

-- new object type path: schema_export/table/constraint/constraint

alter table "user_a"."tab1" add primary key ("code") enable;

oracle語句管理表 DDL

學習oracle的語句管理之前,我們需要了解oracle的體系結構 oracle database 資料庫是由 資料庫 例項組成 從概念上來看,例項是暫時的,它不過是一組邏輯劃分的記憶體結構和程序結構,例項會隨著程序的關閉而關閉,但是資料庫不一樣,資料庫是一堆物理檔案,資料庫是永久存在磁碟上的 除非...

如何在oracle中使用DDL語句!

大家都知道觸發器是無需 commit 的,而且也不能寫 commit 觸發器和觸發它的 dml是同乙個事務 dml提交了,觸發器的操作也提交了,所以無需 commit 否則就會造成錯誤資訊。當然,如果你一定要在觸發器裡寫 commit 那也是可以的,可以用 oracle 中的自治事務來處理,自治事務...

DDL操作導致oracle表空間增大的小知識

ddl create table 建立表 alter table 修改表 drop table 刪除表 truncate table 刪除表中所有行 create index 建立索引 drop index 刪除索引當執行ddl語句時,在每一條語句前後,oracle都將提交當前的事務。如果使用者使用...