Oracle中提取和存储数据库对象的DDL
2007-05-06 12:08:32 来源:WEB开发网运行上面的脚本之后,就建立了一个带有三个索引(两个唯一的和一个不唯一的索引)的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;
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接