對應定義結構獲取
函式:w_func_getobjectddl(object_type varchar2, object_name varchar2)
引數說明:
object_type指物件型別,如INDEX,TABLE等;
object_name指物件的名稱。
目前只對索引型別的比較有效,對如定義欄位比較多的表等物件還不能很好查詢。
以後進行最佳化。
幾個重要資訊:
1、管道輸出,返回的結果是一個結果集,需要用table函式來轉換輸出;
2、對換行符(chr(3)/chr(10))的替換等內容;
3、返回的型別type_xmlstring是單獨定義的一個型別,是一個字串陣列。
使用方式:
Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0
Connected as dvbcetus_sup
SQL> select * from table(w_func_getobjectddl('INDEX', 'IDX_REG_AREA'));
COLUMN_VALUE
--------------------------------------------------------------------------------
--IDX_REG_AREA
create index dvbcetus_sup.idx_reg_area on dvbcetus_sup.tmp_tool_regionaccinfo
pctfree 10 initrans 2 maxtrans 255 nologging
storage(initial 81920 next 81920 minextents 1 maxextents 2147483645 pctincrease
tablespace indx;
函式體:
create or replace function w_func_getobjectddl(object_type varchar2, object_name varchar2)
return type_xmlstring pipelined as
/*Created by
* 提取物件定義資訊
*/
v_rstr varchar2(1000);
v_len number(4) := 1;
v_stpos number(4) := 0;
v_ptpos number(4) := 0;
v_tbpos number(4) := 0;
v_strt number(4) := 1;
v_sublen number(4) := 0;
v_head varchar2(255);
v_mid1 varchar2(255);
v_mid2 varchar2(255);
v_tail varchar2(255);
v_filterstr varchar2(1000);
v_userprefix varchar2(30) := '"'; --指定要過濾的字串
v_clob clob;
Begin
begin
--獲取物件的定義資訊
v_clob := dbms_metadata.get_ddl(object_type, object_name);
v_len := dbms_lob.getlength(v_clob);
--讀取clob內容到字串變數中
dbms_lob.read(v_clob, v_len, v_strt, v_rstr);
v_filterstr := replace(replace(replace(v_rstr, chr(3)), chr(10)), v_userprefix); --過濾掉換行符
v_filterstr := lower(v_filterstr);
v_len := length(v_filterstr);
v_ptpos := instr(v_filterstr, 'pctfree'); --在pctfree處進行截斷
v_stpos := instr(v_filterstr, 'storage') ; --在storage處進行截斷
v_tbpos := instr(v_filterstr, 'tablespace'); --在tablespace處進行截斷
v_head := substr(v_filterstr,1, v_ptpos - 1);
v_mid1 := substr(v_filterstr, v_ptpos, v_stpos - v_ptpos - 1);
v_mid2 := substr(v_filterstr, v_stpos, v_tbpos - v_stpos - 1);
v_tail := substr(v_filterstr, v_tbpos, v_len - v_tbpos - 1) || ';';
pipe row('--' || object_name);
pipe row(v_head);
pipe row(v_mid1);
pipe row(v_mid2);
pipe row(v_tail);
exception when others then
dbms_output.put_line('Error: ' || object_name);
end;
return;
End w_func_getobjectddl;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-555227/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle獲取資料字典定義詳細總結Oracle
- 批量獲取表定義的方法
- activiti7 獲取流程定義的xmlXML
- 【MSSQL】SSMS快速獲取表結構SQLSSM
- jdbcTemplate 獲取資料表結構JDBC
- iovec結構體定義及使用結構體
- 獲取某張表的表結構
- 已知結構體成員地址獲取結構體首地址結構體
- javascript獲取函式定義的引數個數JavaScript函式
- 使用SQL語句獲取SQLite中的表定義SQLite
- iOS 應用下載連結獲取iOS
- Delphi重定義的訊息結構
- Highstate資料結構定義資料結構
- 自定義響應資料結構資料結構
- 對getElementsByTagName("*")獲取全部元素的總結
- 獲取表的結構、欄位描述等
- Sql Server 獲取指定表、檢視結構SQLServer
- iTunes構建版本 獲取不到應用程式
- 關於獲取事件相應的結果事件
- Salt Highstate資料結構定義資料結構
- js獲取非內部取樣式表中定義的屬性值JS
- 空結構體sizeof()獲取的大小是多少結構體
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- javascript獲取偽物件before和after定義的內容JavaScript物件
- cookie 中通過 鍵 獲取相對應的 值Cookie
- Mysql如何讀.frm結尾的表結構定義檔案MySql
- 結構體定義 typedef struct 用法詳解和用法小結結構體Struct
- js如何獲取樣式表中定義的css屬性值JSCSS
- swift 獲取通知設定Swift
- 資料孤島的定義,企業如何應對?
- 軟體定義安全的發展及應對策略
- WM Define Storage Bin Structure定義倉位結構(七)Struct
- javascript獲取連結的絕對地址程式碼例項JavaScript
- Python獲取IP地址對應的地理位置資訊!Python
- 關於goldengate 對源表和目的表的表結構一致的定義Go
- PHP獲取指定函式定義在哪個檔案中及行號PHP函式
- FormRequest 自定義獲取方法名字ORM
- sql2008 獲取表結構說明SQL