獲取表DDL的幾個方法

2021-04-28 02:23:37 字數 1133 閱讀 3622

在9i以前,沒有什麼太好的方法,一般是通過查詢資料字典,然後自己根據語法來拼接成乙個完整的ddl語句,缺點是十分麻煩,需要使用者對ddl的語法十分熟悉,而且經常容易缺失一些關鍵字。最重要的是,查詢表的ddl與查詢檢視的ddl的方法就完全不一樣,要獲取多種物件的ddl,就需要為每種ddl來單獨構造乙個sql

。此外,還有一種方法,就是利用oracle的exp工具。在匯入的時候指定indexfile,使得匯入工具將ddl寫入到乙個檔案中。這種方法的好處是不需要使用者自己來拼接ddl了,而且支援多種型別的ddl,缺點也很明顯,得到的結果無法直接使用,需要手工進行編輯,而編輯過程本身就很麻煩,會消耗大量的時間。

從9i開始,這個問題變得很輕鬆了,只需要乙個查詢語句,就可以獲取物件的詳細的ddl描述,上面所有的缺點完全被客服了:

sql> select dbms_metadata.get_ddl('table', 'oz_member') from dual;

除了這個最常用的方法之外,利用dbms_metadata.open的方式也可以達到相同的效果:

set serverout on size 100000;

declare

v_str clob;

v_handle number;

v_trans_handle number;

begin

v_handle := dbms_metadata.open('table');

dbms_metadata.set_filter(v_handle, 'name', 'oz_member', 'table');

v_trans_handle := dbms_metadata.add_transform(v_handle, 'ddl');

v_str := dbms_metadata.fetch_clob(v_handle);

for i in 1..ceil(dbms_lob.getlength(v_str)/200) loop

dbms_output.put_line(dbms_lob.substr(v_str, 200, (i-1)*200 + 1));

end loop;

end; /

後面這個方法雖然麻煩一些,但是功能很強,可以設定過濾、轉換等功能,這在隨後的文章中會進一步描述。

獲取表約束的DDL語句

昨天同事遇到乙個有關約束的問題.其他同事設定了2個資料庫,其中乙個是從另外乙個exp imp的,但不知什麼原因,現在2個資料庫的使用者下表的約束存在很多不同.他就問我有什麼方法將原庫的約束匯出來,然後重新在新的資料庫中 建立.當然最簡單的方法是使用exp重新匯出原來資料庫的結構資訊,然後匯入新資料庫...

獲取歷史K線資料的幾個方法

2 在網際網路上抓取資料 int istockcode cstring strurl 通過openurl read讀取網頁資料 fields tclose high low topen lclose chg pchg turnover voturnover vaturnover tcap mcap ...

DDL 資料表的建立

ddl data definition language 資料定義語言,用來定義資料庫物件 庫 表 列等 運算元據表,資料表的建立 切換資料庫 use mydatabase 刪除資料表 drop table test create table 表名 屬性名 資料型別 完整性約束條件 屬性名 資料型別...