Oracle、達夢:☆獲取數據庫對象、獲取對象的DDL定義語句(達夢)
一、獲取數據庫對象(Oracle、達夢)
- 以下方式在達夢DM數據庫中都能跑通,Oracle未測試所有的方式。
1、獲取所有對象——所有模式下的
- 數據庫所有對象表:包括表、視圖、物化視圖、函數、存儲過程……等
①、ALL_OBJECTS視圖方式
-- 查詢所有對象
SELECT * from ALL_OBJECTS
-- 篩選條件 - OWENR:哪個數據庫。- OBJECT_TYPE 類型:
SELECT OBJECT_NAME,OBJECT_TYPE from ALL_OBJECTS
WHERE OWNER = 'MIDDLE' AND OBJECT_TYPE = 'MATERIALIZED VIEW'
OBJECT_TYPE解釋:
- oracle的ALL_OBJECTS中的OBJECT_TYPE表示:
TABLE:表示表,這是用于存儲和管理數據庫中數據的主要結構。VIEW:表示視圖,它是一個虛擬表,基于一個或多個表的列的查詢結果生成。PROCEDURE:表示存儲過程,它是一組預編譯的SQL語句,用于執行特定的操作或邏輯。SEQUENCE:表示序列,它是一個數據庫對象,用于生成唯一的序列號。INDEX:表示索引,它可以幫助提高查詢的性能,通過創建單獨的表來存儲查詢中使用的列的值。MATERIALIZED VIEW:表示物化視圖,它是基于一個或多個表的查詢結果預先計算并存儲的視圖。JAVA SOURCE:表示Java源代碼,這是存儲在數據庫中的Java類或接口的源代碼。JAVA CLASS:表示Java類,這是編譯后的Java類,存儲在數據庫中。JAVA RESOURCE:表示Java資源,這可以是任何類型的資源,如屬性文件、文本文件等。JAVA DATA:表示Java數據對象,這是存儲在數據庫中的Java對象。XML TABLE:表示XML表,這是將XML文檔作為表進行存儲和處理的方式。TYPE:表示自定義類型,這是用戶定義的數據類型。PACKAGE:表示包,這是用于封裝和組織相關過程和類型的邏輯單元。JAVA RESOURCE:表示Java資源,這可以是從文件中導入的任何類型的資源。DATA FILE:表示數據文件,這是存儲數據庫數據的物理文件。FUNCTION:函數。
- 達夢的ALL_OBJECTS中的OBJECT_TYPE表示:
TABLE:表示表,這是用于存儲和管理數據庫中數據的主要結構。VIEW:表示視圖,它是一個虛擬表,基于一個或多個表的列的查詢結果生成。PROCEDURE:表示存儲過程,它是一組預編譯的SQL語句,用于執行特定的操作或邏輯。FUNCTION:表示函數,它是一組可調用的代碼塊,用于執行特定的操作或計算結果。SEQUENCE:表示序列,它是一個數據庫對象,用于生成唯一的序列號。INDEX:表示索引,它可以幫助提高查詢的性能,通過創建單獨的表來存儲查詢中使用的列的值。MATERIALIZED VIEW:表示物化視圖,它是基于一個或多個表的查詢結果預先計算并存儲的視圖。PACKAGE:表示包,這是用于封裝和組織相關過程和類型的邏輯單元。TYPE:表示自定義類型,這是用戶定義的數據類型。
②獲取所有對象的其他方式
-- 方式1---------------------
select * from DBA_OBJECTS where OWNER = 'APP1';
-- 方式2---------------------
-- 不能區分:函數、存儲過程
select * from SYS.SYSOBJECTS where SCHID = '150996004';
-- 方式3---------------------
select * from ALL_OBJECTS where owner = 'APP1';
2、獲取所有對象——當前登陸模式下的
- 就是把前面的ALL,改成USER
- 如果只查詢登陸模式下的對象,建議這種方式
SELECT * FROM USER_OBJECTS;
3、獲取其他對象
- ps:包括所有模式、當前模式。當前模式一般是把all換成user
3.1、表
-- 獲取表——所有模式
select * from all_tables;
-- 獲取表——當前登陸模式
select * from user_tables;
3.2、字段
- 包括表、視圖、物化視圖的字段
-- 獲取所有模式下的所有字段,where可以指定模式
select * from all_tab_columns where owner = 'APP1';
-- 獲取當前登陸模式的字段
select * from user_tab_columns;
3.3、視圖
-- 獲取視圖——所有模式
select * from all_views;
-- 獲取視圖——當前登陸模式
select * from user_views;
3.4、索引
-- 獲取索引——所有模式
select * from all_indexes where owner = 'APP1';
-- 獲取索引——當前登陸模式
select * from user_indexes;
- 獲取索引列——索引指定的列
-- 獲取索引列——所有模式
select * from all_ind_columns where index_owner = 'APP1';
-- 獲取索引列——當前登陸模式
select * from user_ind_columns;
-- 獲取當前登陸模式下的索引列——按索引名字去重并統計數量
select count(DISTINCT INDEX_NAME) from user_ind_columns;
3.5、約束——包括主鍵、外鍵
- CONSTRAINT_TYPE:P:主鍵、R:外鍵
- 約束還包括:檢查……等
-- 獲取約束——所有模式
select * from all_constraints where owner = 'APP1';
-- 獲取約束——當前登陸模式
select * from user_constraints;
- 查詢約束所在的列
-- 查詢約束列(列上有約束)——所有模式
select * from all_cons_columns where owner = 'APP1';
-- 查詢約束列(列上有約束)——當前登陸模式
select * from user_cons_columns;
3.6、物化視圖——Oracle
- 也可以使用《一》中的ALL_OBJECTS進行查詢
-- 整個數據庫的物化視圖
select * from DBA_MVIEWS where OWNER = 'MIDDLE'
-- 當前用戶的物化視圖
SELECT * FROM USER_MVIEWS WHERE MVIEW_NAME = 'V2'
-- 創建物化日志
create materialized view log on "Z_ZZX" with rowid, sequence (ID_CPM_JH, CODE) including new values;
-- 查詢物化視圖的日志
select * from MLOG$_Z_ZZX
-- 查詢物化視圖日志表
SELECT * from ALL_OBJECTS WHERE OWNER = 'MIDDLE' and OBJECT_NAME LIKE '%MLOG$%'
-- 查詢物化視圖
SELECT * from ALL_OBJECTS
WHERE OWNER = 'MIDDLE' AND OBJECT_TYPE = 'MATERIALIZED VIEW'
-- 查詢物化視圖需要的表
select REFERENCED_NAME from ALL_DEPENDENCIES WHERE OWNER = 'MIDDLE' AND TYPE = 'MATERIALIZED VIEW' AND NAME = 'WH_LOG' AND REFERENCED_NAME <> 'WH_LOG'
-- 連表查詢物化視圖以及使用到的表
SELECT * FROM user_mviews um left join SYS.ALL_DEPENDENCIES ad on ad.NAME = um.MVIEW_NAME WHERE ad.OWNER = 'MIDDLE' AND ad.TYPE = 'MATERIALIZED VIEW' AND ad.NAME = 'WH_LOG' AND ad.REFERENCED_NAME <> 'WH_LOG'
二、獲取對象的DDL-數據定義語言(達夢)
- 語法:SELECT dbms_metadata.get_ddl('對象類型','對象名稱') FROM DUAL
- 對象類型見:類型(OBJECT_TYPE)達夢
-- 獲取DDL語句(根據不同類型)
SELECT dbms_metadata.get_ddl('MATERIALIZED_VIEW','WH_LOG') FROM DUAL
-- 獲取DDL-物化視圖日志
SELECT dbms_metadata.get_ddl('TABLE','MLOG$_Z_ZZX') FROM DUAL
-- 獲取DDL-物化視圖
SELECT dbms_metadata.get_ddl('MATERIALIZED_VIEW','CS_COMMIT_COMPLETE') FROM DUAL
SELECT dbms_metadata.get_ddl('MATERIALIZED_VIEW_LOG','MLOG$_Z_ZZX') FROM DUAL
-- 獲取DDL-視圖
SELECT dbms_metadata.get_ddl('VIEW','V1') FROM DUAL
…… 還可以獲取建表等的語句。
浙公網安備 33010602011771號