- 其實就是使用dbms_metadata.get_ddl實現,在看這個文章之前,請先把末尾那兩個引用的文章看完
- 有時會查看或者是導出表、存儲過程的ddl語句,如果知道了方法,以后就不用每次都去網上搜索
以下操作使用pl/sql
- 可以查詢的類型有6種(我知道的,可能有未知領域) ,用如下語句:
-- 6種:SEQUENCE、TRIGGER、TABLE、INDEX、VIEW、FUNCTION
select object_type from user_objects group by object_type
Paste_Image.png
- 比如查詢
SEQUENCE
的ddl ,如下:
SELECT sequence_name,DBMS_METADATA.GET_DDL('SEQUENCE',sequence_name)
FROM user_sequences;
Paste_Image.png
Paste_Image.png
- 解析
SELECT sequence_name,DBMS_METADATA.GET_DDL('SEQUENCE',sequence_name) FROM user_sequences;
Paste_Image.png
- 例子:
-- 查詢SEQUENCE
SELECT sequence_name,DBMS_METADATA.GET_DDL('SEQUENCE',sequence_name) FROM user_sequences;
-- 查詢TABLE
SELECT table_name,DBMS_METADATA.GET_DDL('TABLE',table_name) FROM user_tables;
-- 查詢TRIGGER
SELECT trigger_name,DBMS_METADATA.GET_DDL('TRIGGER',trigger_name) FROM user_triggers;
-- 查詢VIEW
SELECT view_name,DBMS_METADATA.GET_DDL('VIEW',view_name) FROM user_views;
-- 得到一個用戶下的所有表,索引,存儲過程,函數的ddl
SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)FROM USER_OBJECTS uwhere U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE','FUNCTION');
-- 查看當前用戶表的SQL
select dbms_metadata.get_ddl('TABLE','EMPLOYEES') from dual;
-- 查看其他用表或索引的SQL
SELECT DBMS_METADATA.GET_DDL('TABLE','DEPT','SCOTT') FROM DUAL;
-- 查看所需表的索引
select INDEX_NAME, INDEX_TYPE, TABLE_NAME from user_indexes WHERE table_name='EMP';
--查看當前用戶索引的SQL
select dbms_metadata.get_ddl('INDEX','PK_DEPT') from dual;
-- 查看其他用戶索引的SQL
select dbms_metadata.get_ddl('INDEX','PK_DEPT','SCOTT') from dual;
-- 查看所需表的約束
select owner, table_name, constraint_name, constraint_type from user_constraints where table_name='EMP';
-- 查看創建主鍵的SQL
SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','EMP_PK') FROM DUAL;
-- 查看創建外鍵的SQL
SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT','EMP_FK_DEPT') FROM DUAL;
-- 查看當前用戶視圖的SQL
SELECT dbms_metadata.get_ddl('VIEW', 'MY_TABLES') from dual ;
-- 查看其他用戶視圖的SQL
SELECT dbms_metadata.get_ddl('VIEW', 'MY_TABLES','SCOTT') FROM DUAL;
-- 查看創建視圖的SQL也可以
select text from user_views where view_name=upper('&view_name');
--得到所有表空間的ddl語句
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)FROM DBA_TABLESPACES TS;
--得到所有創建用戶的ddl
SELECT DBMS_METADATA.GET_DDL('USER',U.username)FROM DBA_USERS U;
--去除storage等多余參數
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
小記:
- 仔細觀察會發現很簡單,都不用去死記每個類型的查詢語句,記住一個就ok了