高分求一问题:谁知道informix里的对象语法结构存何处?
谁知道informix里的对象语法结构存何处?
----主要是触发器的源代码?
[最优解释]
select * from systrigbody;
[其他解释]
获得数据库对象的方法探讨(2)
角色
存储角色的表/视图有:
DBA_ROLES
描述数据库中所有角色。
取得角色方法:
SELECT ROLE FROM SYS.DBA_ROLES;
表空间
SELECT TABLESPACE_NAME FROM SYS.DBA_TABLESPACES;
数据文件
SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME FROM SYS.DBA_DATA_FILES;
数据库连接
存储数据库连接的系统表/视图主要有:
DBA_LINKS
描述数据库中所有的连接的属性。
ALL_LINKS
描述数据库中所有的用户可访问的连接的属性。
USER_LINKS
描述数据库中当前用户的连接属性。
因此,可以从DBA_DB_LINKS中取得连接:
SELECT * FROM SYS.DBA_DB_LINKS;
同义词
SELECT * FROM SYS.ALL_SYNONYMS WHERE TABLE_OWNER = 'DBAUDIT';
程序包
取得程序包可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE';
取得隶属于某个用户的程序包可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE' AND OWNER = 'DBAUDIT';
取得程序包内容可以用:
SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'PACKAGE';
程序包体
取得程序包体可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY';
取得隶属于某个用户的程序包可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY ' AND OWNER = 'DBAUDIT';
取得程序包内容可以用:
SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'PACKAGE BODY ';
簇
暂不扫描。
高级队列
暂不扫描。
序列
暂不扫描。
数组类型
暂不扫描。
维
暂不扫描。
Java源
暂不扫描。
对象类型
暂不扫描。
刷新组
暂不扫描。
概要文件
暂不扫描。
Sybase
取得数据库名的方法
系统存储过程sp_helpdb
或者
USE master
SELECT d.name dbname, u.name owner FROM sysdatabases d, sysusers u WHERE d.suid = u.suid
取得表的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的用户表:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND type = 'U'
获取指定数据库的系统表:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND type = 'S'
或者统一使用:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND (type = 'U' OR type = 'S')
注:
sysobjects中type字段类型解释:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
取得列的方法
系统存储过程
USE xxxDatabase
EXEC sp_help xxxTable
取得视图的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的视图:
USE xxx
SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND type = 'V'
获取指定数据库的视图的内容:
EXEC sp_helptext xxxObject
取得存储过程的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的存储过程或者扩展存储过程:
USE xxx
SELECT sysobjects.name name, sysusers.name owner FROM sysobjects, sysusers WHERE sysobjects.uid = sysusers.uid AND (type = 'P' OR type = 'X')
获取指定数据库的存储过程或者扩展存储过程的内容:
EXEC sp_helptext xxxObject
无法获取加密的存储过程。扩展存储过程只能得到dll程序名。
取得函数的方法
Sybase不支持用户定义函数。
取得触发器的方法
获取指定数据库的表的触发器:
取得索引的方法
系统存储过程
USE xxx
EXEC sp_helpindex xxxTable
用户
系统存储过程
USE xxx
EXEC sp_helpuser
角色
DB2
特殊
? DB2只能连接特定数据库,不能自动扫描数据库对象。
? DB2表必须用用户来区别,否则表可能重名。
? DB2不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。
取得数据库名的方法
只能由用户指定数据库,不能自动扫描到特定数据库服务器上的所有数据库。
取得表的方法
SELECT NAME, CREATOR FROM SYSIBM.SYSTABLES WHERE TYPE = 'T'
或者
SELECT TABNAME, TABSCHEMA FROM SYSCAT.TABLES WHERE TYPE = 'T'
取得列的方法
SELECT NAME, COLTYPE FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = 'SYSTABLES' AND TBCREATOR = 'SYSIBM'
或者
SELECT COLNAME, TYPENAME FROM SYSCAT.COLUMNS WHERE TABNAME = 'SYSTABLES' AND TABSCHEMA = 'SYSIBM'
取得视图的方法
SELECT NAME, CREATOR FROM SYSIBM.SYSTABLES WHERE TYPE = 'V'
或者
SELECT NAME, CREATOR FROM SYSIBM.SYSVIEWS
或者
SELECT TABNAME, TABSCHEMA FROM SYSCAT.TABLES WHERE TYPE = 'V'
或者
SELECT VIEWNAME, VIEWSCHEMA FROM SYSCAT.VIEWS
取得内容的方法
SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWNAME = 'VIEWS' AND VIEWSCHEMA = 'SYSCAT'
取得存储过程的方法
SELECT PROCNAME, PROCSCHEMA FROM SYSIBM.SYSPROCEDURES
取得存储过程内容的方法
SELECT TEXT FROM SYSIBM.SYSPROCEDURES WHERE PROCNAME = 'XXX' AND PROCSCHEMA = 'YYY'
取得函数的方法
SELECT NAME, SCHEMA FROM SYSIBM.SYSFUNCTIONS
取得函数内容可以用:
取得触发器的方法
SELECT NAME, SCHEMA FROM SYSIBM.SYSTRIGGERS WHERE TBNAME = 'SYSTABLES' AND TBCREATOR = 'SYSIBM'
或者
SELECT TRIGNAME, TRIGSCHEMA FROM SYSCAT.TRIGGERS WHERE TABNAME = 'SYSTABLES' AND TABSCHEMA = 'SYSIBM'
取得触发器内容的方法:
SELECT TEXT FROM SYSIBM.SYSTRIGGERS WHERE NAME = 'XXX' AND SCHEMA = 'YYY '
取得索引的方法
SELECT NAME, CREATOR, COLNAMES FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'SYSTABLES' AND TBCREATOR = 'SYSIBM'
或者
SELECT INDNAME, INDSCHEMA, COLNAMES FROM SYSCAT.INDEXES WHERE TABNAME = 'SYSTABLES' AND TABSCHEMA = 'SYSIBM'
用户
SELECT GRANTEE FROM SYSIBM.SYSDBAUTH WHERE GRANTEETYPE = 'U'
或者
SELECT GRANTEE FROM SYSCAT.DBAUTH WHERE GRANTEETYPE = 'U'
角色
DB2只有用户组的概念。
SELECT GRANTEE FROM SYSIBM.SYSDBAUTH WHERE GRANTEETYPE = 'G'
或者
SELECT GRANTEE FROM SYSCAT.DBAUTH WHERE GRANTEETYPE = 'G'
表空间
SELECT TBSPACE FROM SYSCAT.TABLESPACES
数据库连接
同义词
Informix
取得数据库名的方法
DATABASE sysmaster
SELECT name, owner FROM sysdatabases
取得表的方法
获取指定数据库的表:
DATABASE xxx
SELECT tabname, owner, tabid FROM systables WHERE tabtype = 'T'
注:
tabid 为0-24为系统表,100-xxx为用户表。
tabtype字段类型解释:
T = 用户表
V = 视图
P = 私有同义词
S = 同义词
取得列的方法
DATABASE xxxDatabase
SELECT c.colname, c.coltype FROM syscolumns c, systables t WHERE c.tabid = t.tabid AND t.tabname = 'xxxTable'
可以取得包括视图的列。
注:
coltype 字段意义:
0 = CHAR 8 = MONEY
1 = SMALLINT 10 = DATETIME
2 = INTEGER 11 = BYTE
3 = FLOAT 12 = TEXT
4 = SMALLFLOAT 13 = VARCHAR
5 = DECIMAL 14 = INTERVAL
6 = SERIAL 15 = NCHAR
7 = DATE 16 = NVARCHAR
取得视图的方法
获取指定数据库的视图:
DATABASE xxx
SELECT tabname, owner FROM systables WHERE tabtype = 'V'
取得视图内容:
SELECT v.viewtext FROM sysviews v, systables t WHERE v.tabid = t.tabid AND t.tabname = 'xxxTable'
取得存储过程的方法
获取指定数据库的存储过程:
DATABASE xxx
SELECT procname, owner FROM sysprocedures
获取指定数据库的存储过程的内容:
SELECT b.data FROM sysprocbody b, sysprocedures p WHERE b.procid = p.procid AND p.procname = 'systdist' AND datakey = 'T'
取得函数的方法
Informix不支持用户定义函数?
取得触发器的方法
获取指定数据库的表的触发器:
SELECT g.trigname, g.owner, g.event FROM systriggers g, systables t WHERE g.tabid = t.tabid AND t.tabname = 'xxxTable'
取得触发器内容:
SELECT b.data FROM systrigbody b, systriggers g WHERE b.trigid = g.trigid AND g.trigname = '%s' AND datakey = 'D'
取得索引的方法
获取指定数据库的表的触发器:
SELECT i.idxname FROM sysindexes i, systables t WHERE i.tabid = t.tabid AND t.tabname = 'xxxTable'
[其他解释]
顺便在网上找了下,见上面资料,供大家参考。