DB2 基础: 如何从 DB2 UDB 系统编目中获得有用的信息
2010-07-20 00:00:00 来源:WEB开发网可以构造很多其他的查询来检索授权数据。下面是另外两个例子:
清单 5. 检索授权数据
connect to sample
检索所有被显式地授予 DBADM 权限的授权名称:
select distinct grantee from syscat.dbauth
where dbadmauth = 'Y'
检索授给其他用户的一组表权限:
select * from syscat.tabauth where grantor = user
connect reset
检索数据类型和例程数据
可以使用系统编目视图来轻松地检索关于用户定义数据类型或例程的信息。例如:
清单 6. 检索数据类型和例程数据
connect to sample
检索关于所有用户定义类型(即不属于 SYSIBM 模式的类型)的信息:
select typeschema, typename, sourcename, metatype from syscat.datatypes
where typeschema != 'SYSIBM'
检索关于所有用户定义例程(即所属模式的名称不是以 SQL 或 SYS 开头的例程)的信息:
select routineschema, routinename, routinetype, origin, language, text
from syscat.routines
where substr(routineschema,1,3) != 'SQL' and substr(routineschema,1,3) != 'SYS'
connect reset
检索约束数据
也可以使用系统编目视图来检索关于 NOT NULL、惟一、主键、外键和表检查约束的信息。例如:
清单 7. 检索约束数据
connect to sample
检索由用户 MELNYK 创建的表中所有不能为空的一组列:
select substr(tabname,1,16) as tabname, substr(colname,1,16) as colname, nulls
from syscat.columns
where tabschema = 'MELNYK' and nulls = 'N'
检索其上定义了惟一性约束(不是主键约束)的一组表:
"select substr(tabschema,1,16) as tabschema, substr(tabname,1,16) as tabname, keyunique
from syscat.tables
where keyunique > 0"
检索所有为 SAMPLE 数据库定义的主键。如果一个列是它所属表的主键的一部分,
那么 KEYSEQ 包含一个非空的值。该值表示这个列在主键中所处的以数字表示的位置:
select substr(tabschema, 1, 16) as tabschema, substr(tabname, 1, 16) as tabname,
substr(colname, 1, 16) as colname, keyseq
from syscat.columns
where keyseq is not null
检索参与由惟一性、主键或外键约束定义的一个键的所有列。识别约束名和类型,
以及该列在键中所处的以数字表示的位置(起始位置是 1):
select substr(k.constname,1,20) as constname, t.type, substr(k.tabname,1,20) as tabname,
substr(k.colname,1,16) as colname, k.colseq
from syscat.keycoluse k, syscat.tabconst t
where k.constname = t.constname
检索每个表检查约束:
select substr(constname,1,20) as constname, substr(tabname,1,20) as tabname,
substr(text,1,32) as text
from syscat.checks
connect reset
更多精彩
赞助商链接