元数据存储器: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过程(重载的):显示存储器的内容。 
2/2 首页 上一页 1 2 |