Oracle Metadata 結構描述集合完整參考
ADO.NET GetSchema() 方法透過結構描述集合 (Schema Collections) 取得資料庫中繼資料。Oracle (dotConnect for Oracle) 支援標準集合與 Oracle 專屬集合,本文整理所有集合名稱、限制條件數量與用途說明。
GetSchema 多載與限制條件
// 無參數:取得所有可用集合清單
DataTable collections = conn.GetSchema();
// 單一參數:取得指定集合所有資料
DataTable tables = conn.GetSchema("Tables");
// 兩個參數:集合名稱 + 限制條件陣列
// restrictions 陣列長度 <= 集合定義的限制數量
// null 表示不套用該層限制
DataTable cols = conn.GetSchema("Columns", new string[] { "SCOTT", "EMP", null });
// 等同:SELECT * FROM ALL_TAB_COLUMNS WHERE OWNER='SCOTT' AND TABLE_NAME='EMP'
標準結構描述集合完整表
| 集合名稱 | 限制數 | 說明 | 限制欄位順序 |
| MetaDataCollections | 0 | 所有可用集合清單 | - |
| ReservedWords | 0 | 保留字清單 | - |
| Users | 1 | 資料庫用戶 | Username |
| Tables | 2 | 資料表/視圖 | Owner, TableName |
| Views | 2 | 視圖 | Owner, ViewName |
| Columns | 3 | 欄位定義 | Owner, TableName, ColumnName |
| Indexes | 4 | 索引定義 | Owner, IndexName, TableName, TableOwner |
| IndexColumns | 5 | 索引包含欄位 | IndexOwner, IndexName, TableOwner, TableName, ColumnName |
| Functions | 2 | 函數 | Owner, FunctionName |
| Procedures | 3 | 預存程序 | Owner, PackageName, ProcedureName |
| Arguments | 4 | 程序/函數參數 | Owner, PackageName, ProcedureName, ArgumentName |
| Synonyms | 2 | 同義詞 | Owner, SynonymName |
| Sequences | 2 | 序列 | Owner, SequenceName |
| Packages | 2 | 套件規格 | Owner, PackageName |
| PackageBodies | 2 | 套件主體 | Owner, PackageName |
| ForeignKeys | 3 | 外鍵約束 | Owner, KeyName, TableName |
| ForeignKeyColumns | 3 | 外鍵欄位 | Owner, KeyName, TableName |
| Triggers | 2 | 觸發器 | Owner, TriggerName |
| Clusters | 2 | 叢集 | Owner, ClusterName |
Oracle 專屬集合 (dotConnect 擴充)
| 集合名稱 | 限制數 | 說明 |
| Tablespaces | 1 | 表空間,限制:TablespaceName |
| DataFiles | 1 | 資料檔案,限制:TablespaceName |
| RollbackSegments | 1 | 回滾段,限制:SegmentName |
| RedoLogs | 0 | 重做日誌組 |
| ControlFiles | 0 | 控制檔案 |
| Parameters | 1 | 初始化參數,限制:ParameterName |
| Sessions | 0 | 當前會話 |
| Locks | 0 | 當前鎖定 |
| Dependencies | 3 | 物件相依性,限制:Owner, Name, Type |
| XMLSchemas | 2 | XML Schema,限制:Owner, SchemaName |
實用查詢範例
// 取得 SCOTT 綱要下所有資料表
var tables = conn.GetSchema("Tables", new[] { "SCOTT", null });
// 取得 EMP 表所有欄位
var cols = conn.GetSchema("Columns", new[] { "SCOTT", "EMP", null });
// 取得特定索引包含欄位
var idxCols = conn.GetSchema("IndexColumns", new[] { "SCOTT", "PK_EMP", "SCOTT", "EMP", null });
// 取得所有序列
var seqs = conn.GetSchema("Sequences", new[] { "SCOTT", null });
// 取得套件與主體
var pkgs = conn.GetSchema("Packages", new[] { "SCOTT", null });
var pkgsBody = conn.GetSchema("PackageBodies", new[] { "SCOTT", null });
注意事項
- 大小寫敏感:Oracle 資料字典儲存為大寫,限制值建議轉大寫
- 不支援萬用字元:限制值必須精確匹配,不支援
% 或 _
- 效能考量:無限制查詢大型綱要會很慢,務必指定 Owner
- 權限需求:需
SELECT_CATALOG_ROLE 或對應字典視圖查詢權限
對應資料字典視圖
| 集合 | 主要資料字典視圖 |
| Tables | ALL_TABLES, USER_TABLES, DBA_TABLES |
| Columns | ALL_TAB_COLUMNS, USER_TAB_COLUMNS |
| Indexes | ALL_INDEXES, USER_INDEXES |
| Procedures | ALL_PROCEDURES, USER_PROCEDURES |
| Arguments | ALL_ARGUMENTS, USER_ARGUMENTS |
| Synonyms | ALL_SYNONYMS, USER_SYNONYMS |
| Sequences | ALL_SEQUENCES, USER_SEQUENCES |