AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > Oracle

Oracle中提取和存储数据库对象的DDL

51自学网 http://www.51zixue.net

  元数据存储器: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过程(重载的):显示存储器的内容。

 
 

上一篇:Oracle 9i 数据库异常关闭后的启动  下一篇:PL/SQL实现Oracle数据库任务调度