元数据存储器:MetaDataPkg程序包规范
首先,你必须建立记录类型来存储独立的对象(例如数据表、索引等)的所有必要信息:
| suBType tString is varchar2(30); suBType tDBString is varchar2(255); suBType tDBLongString is varchar2(4000); suBType tLongString is varchar2(32767); type tArrayLongString is table of tLongString index by pls_integer; type tMetaObject is record ( aName tString, aType tString, aLogging tString, aParallel tString, aStatus tString, aValidated tString, aRely tString, aDDLString tLongString ); |
tMetaObject属性保存了下面一些信息:
· aName:对象的名称,例如EMPTEST_PK1。
· aType:对象的类型,例如’YES’ (分区的)/’NO’ (分区的) (用于表)、 ’UNIQUE’/’NONUNIQUE’ (用于索引)、 约束类型 ’P’/’U’/’C’/’R’ (用于约束)。
· aLogging:对象的日志选项,例如’LOGGING’/ ’NOLOGGING’ (用于表和索引)。
· aParallel: 对象的平行程度(用于表和索引)。
· AStatus:对象的状态,例如’VALID’/’UNUSABLE’ 用于索引、 ’Y’ (备份了)/’N’ (未备份)用于表。
· AValidated:对象的验证选项,例如’VALIDATED’/’NOT VALIDATED’(用于约束)。
· ARely:对象的依赖选项,例如’RELY’/’NORELY’ (用于约束)。
· ADDLString:对象的定义SQL字符串。
现在你必须定义一个相关的数组类型,它能够列举出某种类型的对象,从保存tMetaObject类型的多个对象,例如,所有的EmpTest索引:
| type tArrayMetaObject is table of tMetaObject index by pls_integer; |
下一步需要建立一个记录类型,它包含了数据表表自身(aTable)的tMetaObject属性和三个tArrayMetaObject属性:一个用于索引(aIndexes),一个用于约束(aConstraints),一个用于触发器(aTriggers):
| type tFullMetaObject is record ( aTable tMetaObject, aIndexes tArrayMetaObject, aConstraints tArrayMetaObject, aTriggers tArrayMetaObject ); |
tFullMetaObject对象类型保存了单个表的全部对象的元数据。最后,位于顶层的类型是tFullMetaObject数组。TarrayFullMetaObjectByString类型是tFullMetaObject的一个表,索引类型是varchar2(30)。
列表2:MetaDataPkg程序包规范
用如下的方式建立或更新MetaDataPkg:
| cEnabled constant char(7) := ’ENABLED’; cDisabled constant char(8) := ’DISABLED’; cUsable constant char(6) := ’USABLE’; cUnusable constant char(8) := ’UNUSABLE’; cValid constant char(5) := ’VALID’; cInvalid constant char(7) := ’INVALID’; cTable constant char(5) := ’TABLE’; cView constant char(4) := ’VIEW’; cIndex constant char(5) := ’INDEX’; cConstraint constant char(10) := ’CONSTRAINT’; cTrigger constant char(7) := ’TRIGGER’; cLoBType constant char(3) := ’LOB’; cCloBType constant char(4) := ’CLOB’; cBloBType constant char(4) := ’BLOB’; cPackage constant char(7) := ’PACKAGE’; cPackageBody constant char(12) := ’PACKAGE BODY’; cProcedure constant char(9) := ’PROCEDURE’; cFunction constant char(8) := ’FUNCTION’; cSequence constant char(8) := ’SEQUENCE’; cSynonym constant char(7) := ’SYNONYM’; cType constant char(4) := ’TYPE’; cColumn constant char(6) := ’COLUMN’; cJavaSource constant char(11) := ’JAVA SOURCE’; cJavaClass constant char(10) := ’JAVA CLASS’; cYes constant char(3) := ’YES’; cNo constant char(2) := ’NO’; cPKConsType constant char(1) := ’P’; cUNConsType constant char(1) := ’U’; cFKConsType constant char(1) := ’R’; cCKConsType constant char(1) := ’C’; cDropStorage constant char(12) := ’DROP STORAGE’; cReuseStorage constant char(13) := ’REUSE STORAGE’; cCascade constant char(19) := ’CASCADE CONSTRAINTS’; cNoCascade constant char(10) := ’NO CASCADE’; cEnable constant char(6) := ’ENABLE’; cNovalidate constant char(10) := ’NOVALIDATE’; cRely constant char(4) := ’RELY’; cNoRely constant char(6) := ’NORELY’; cValidated constant char(9) := ’VALIDATED’; cNotValidated constant char(13) := ’NOT VALIDATED’; cLogging constant char(7) := ’LOGGING’; cNoLogging constant char(9) := ’NOLOGGING’; cParallel constant char(8) := ’PARALLEL’; cNoParallel constant char(10) := ’NOPARALLEL’; cNull constant char(4) := ’NULL’; cNotNull constant char(8) := ’NOT NULL’; cDefault constant char(7) := ’DEFAULT’; cSYSPrefix constant char(4) := ’SYS_’; cDoubleQuote constant char(1) := ’"’; suBType tString is varchar2(30); suBType tDBString is varchar2(255); suBType tDBLongString is varchar2(4000); suBType tLongString is varchar2(32767); type tArrayLongString is table of tLongString index by pls_integer; type tMetaObject is record ( aName tString, aType tString, aLogging tString, aParallel tString, aStatus tString, aValidated tString, aRely tString, aDDLString tLongString ); type tArrayMetaObject is table of tMetaObject index by pls_integer; type tFullMetaObject is record ( aTable tMetaObject, aIndexes tArrayMetaObject, aConstraints tArrayMetaObject, aTriggers tArrayMetaObject ); type tArrayFullMetaObjectByString is table of tFullMetaObject index by varchar2(30); procedure Load ( pTable in tString, pForce in boolean := false ); procedure Reset ( pTable in tString ); procedure Reset; function GetMeta ( pTable in tString, pForce in boolean := false ) return tFullMetaObject; function GetMeta return tArrayFullMetaObjectByString; procedure SetMeta ( pTable in tString, pFullMetaObject in tFullMetaObject ); procedure SetMeta ( pArrayFullMetaObjectByString in tArrayFullMetaObjectByString ); procedure Show ( pTable in tString ); procedure Show; end MetaDataPkg; |
上面的类型对象是作为元数据存储器的,用于存放多个表的完整的元数据信息集合。所有上面的类型都包含在程序包规范中(列表2所示)。我还介绍了下面一些API:
· MetaDataPkg.Load()过程:把特定表的元数据信息载入存储器中。
· MetaDataPkg.GetMeta()函数:它从存储器中检索tFullMetaObject类型的对象。
· MetaDataPkg.SetMeta()过程(重载的):把对象的元数据存储到存储器中。
· MetaDataPkg.Reset过程(重载的):对存储器复位。
· MetaDataPkg.Show过程(重载的):显示存储器的内容。
- 相关新闻
- 用户评论
数据载入中,请稍后……
评论内容:不能超过100字,不需审核,请自觉遵守互联网相关政策法规。
- 推广服务
IT部落推荐阅读
·生活服务
·精彩图文
·赞助商链接
Rss订阅
