WEB开发网
开发学院数据库Oracle Oracle中提取和存储数据库对象的DDL 阅读

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

 2007-05-06 12:08:32 来源:WEB开发网   
核心提示: 运行上面的脚本之后,就建立了一个带有三个索引(两个唯一的和一个不唯一的索引)的EmpTest表:select index_name, index_type, uniquenessfrom user_indexeswhere table_name = ’EMPTEST&rsquo

运行上面的脚本之后,就建立了一个带有三个索引(两个唯一的和一个不唯一的索引)的EmpTest表:select index_name, index_type, uniqueness
from user_indexes
where table_name = ’EMPTEST’;

EmpTest表还包括六个约束:

· 一个主键-EmpTest_PK

· 一个备用键-EmpTest_AK

· 一个检查约束-EmpTest_CK1

· 系统生成的(SYS_*)三个非空的约束,名称如下:

现在我们执行匿名的PL/SQL代码块来调用DBMS_METADATA.GET_DDL函数,检索数据表的定义。

DBMS_OUTPUT程序包只能输出最长为255个字符的字符串,由于在处理数据表的DDL字符串的时候太容易超过这个限制,所以这是一个问题。为了解决这个问题,我们使用了本地过程Show()(列表1所示)。

列表1:调用DBMS_METADATA.GET_DDL()函数的PL/SQL代码块declare
vClob clob;
vLongString varchar2(32767);
vOffSet pls_integer := 0;
vLength pls_integer := 0;
vTable varchar2(30) := ’EmpTest’;
procedure Show (pVariable varchar2, pLineSize pls_integer := 80)
is
begin
dbms_output.enable(1000000);
if (length(pVariable) > pLineSize)
then
dbms_output.put_line(substr(pVariable, 1, pLineSize));
Show(substr(pVariable, pLineSize + 1), pLineSize);
else
dbms_output.put_line(pVariable);
end if;
end Show;
begin
-- 获取 DDL
vClob := dbms_metadata.get_ddl(’TABLE’, upper(vTable));
-- 获取 CLOB 长度
vLength := dbms_lob.GetLength(vClob);
dbms_output.put_line(’DDL length: ’ || to_char(vLength));
vOffSet := 1;
dbms_lob.read(vClob, vLength, vOffSet, vLongString);
-- 关闭 CLOB
if (dbms_lob.isOpen(vClob) > 0)
then
dbms_lob.close(vClob);
end if;
Show(vLongString, 80);
end;

上一页  1 2 3 4  下一页

Tags:Oracle 提取 存储

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接