Progress OpenEdge列关联查询、元数据存储及库列表查询方法
Progress OpenEdge 元数据相关查询指南
列关联、列引用查询(对应MySQL INFORMATION_SCHEMA.KEY_COLUMN_USAGE)
OpenEdge 未采用 MySQL 式的虚拟 INFORMATION_SCHEMA 架构,所有数据对象元数据存储在 PUB schema 下以下划线为前缀的系统编目表中。要获取全库或指定表的主外键关联、列引用关系,可通过关联以下系统表实现,支持仿照 MySQL 的逻辑筛选指定数据库、指定表:
SELECT fk._DbName AS 所属数据库, childTable._File-Name AS 外键表名, childCol._Field-Name AS 外键列名, parentTable._File-Name AS 关联主键表名, parentCol._Field-Name AS 关联主键列名 FROM PUB._ForeignKey fk -- 关联外键所属表元数据 JOIN PUB._File childTable ON fk._Foreign-File-Id = childTable._File-Id AND fk._DbName = childTable._DbName -- 关联外键与主键的列映射关系 JOIN PUB._ForeignKeyRow fkRow ON fk._Idx-Name = fkRow._Idx-Name AND fk._DbName = fkRow._DbName -- 关联外键列元数据 JOIN PUB._Field childCol ON fkRow._Foreign-Field-Id = childCol._Field-Id AND childCol._File-Id = childTable._File-Id -- 关联主键所属表元数据 JOIN PUB._File parentTable ON fk._Primary-File-Id = parentTable._File-Id AND fk._DbName = parentTable._DbName -- 关联主键列元数据 JOIN PUB._Field parentCol ON fkRow._Primary-Field-Id = parentCol._Field-Id AND parentCol._File-Id = parentTable._File-Id -- 筛选指定表:如需查询单个表,追加 AND childTable._File-Name = '目标表名' -- 筛选指定数据库:如需限定范围,追加 AND fk._DbName = '目标数据库名'
如需查询主键约束本身的列信息,可关联_Index、_IndexRow、_File、_Field系统表,筛选_Index.Type = 0(主键标识)即可。
存储过程、函数、视图的存储位置
- 视图:元数据与定义信息存储于数据库内部的
_View、_ViewTable、_ViewTrig系统表,包含视图创建SQL、关联基表、内置触发规则等内容 - ABL(原4GL)存储过程/函数:元数据(名称、入参出参、所属schema、编译版本)存储于
_Procedure系统表,编译后的r-code默认存储在操作系统配置的PROPATH路径下,也可配置为直接存储在数据库内部 - 纯SQL语法编写的存储过程/函数:定义代码、参数元数据全部存储于数据库内部的
_SqlProc、_SqlParam系统表,无独立物理文件
数据库名称列表查询语句
OpenEdge 同一客户端连接可挂载多个独立数据库实例,查询当前连接下所有挂载数据库的语句为:
SELECT _DbName AS 数据库名, _Db-Path AS 数据库物理存储路径 FROM PUB._Db;
内容的提问来源于stack exchange,提问作者Abhishek C
相关产品推荐
相关产品推荐

