求IBM DB2/iSeries对应Oracle SYS.GLOBAL_NAME、MS-SQL sys.databases的查询语句
获取IBM DB2 for iSeries(IBM i)的库/数据库列表
嘿,刚好我对DB2 for iSeries(也就是咱们常说的IBM i平台上的DB2)的系统视图比较熟悉,你的需求完全可行——不过得先明确一点:IBM i里的**「库(Library)」**其实和MSSQL里的「数据库」概念更对应,而DB2 for LUW(Linux/Unix/Windows)的数据库逻辑和它不一样。下面给你两种常用的查询方式,适配不同版本的IBM i:
方式1:使用现代系统视图(IBM i 7.2及以上推荐)
QSYS2.LIBRARY_INFO是IBM在较新版本中提供的视图,包含了库的详细信息,用它查询用户库很直观:
SELECT LIBRARY_NAME FROM QSYS2.LIBRARY_INFO WHERE LIBRARY_TYPE = 'PROD' -- 仅返回生产类库,若要所有类型可去掉此条件 AND LIBRARY_NAME NOT IN ('QSYS', 'QSYS2', 'SYSTEM', 'SYSIBM', 'SYSIBMADM', 'SYSPROC') -- 排除系统核心库
方式2:兼容旧版本(IBM i 7.1及以下)
如果你的程序需要适配更早版本的IBM i,可以使用传统的SYSIBM.SYSLIBRARIES视图:
SELECT NAME FROM SYSIBM.SYSLIBRARIES WHERE TYPE = 'L' -- 指定类型为库 AND NAME NOT IN ('QSYS', 'QSYS2', 'SYSTEM', 'SYSIBM', 'SYSIBMADM', 'SYSPROC')
额外说明
- 如果你需要筛选当前用户有权限访问的库,可以结合
QSYS2.OBJECT_AUTHORIZATION视图添加权限过滤条件,比如:SELECT LI.LIBRARY_NAME FROM QSYS2.LIBRARY_INFO LI JOIN QSYS2.OBJECT_AUTHORIZATION OA ON LI.LIBRARY_NAME = OA.OBJECT_NAME AND OA.OBJECT_TYPE = '*LIB' AND OA.AUTHORIZATION_NAME = CURRENT_USER AND OA.AUTHORITY LIKE '%R%' -- 至少有读取权限 WHERE LI.LIBRARY_TYPE = 'PROD' AND LI.LIBRARY_NAME NOT IN ('QSYS', 'QSYS2', 'SYSTEM', 'SYSIBM', 'SYSIBMADM', 'SYSPROC') - 和Oracle的
SYS.global_name不同,IBM i通常是单数据库实例,所有业务数据都以「库」的形式组织,所以你要的“数据库列表”实际上就是这些用户库的列表。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

