1. 苏葳的备忘录首页
  2. 数据库

Oracle的utl_file文件操作包和DBMS_METADATA.get_ddl方法。

oracle ddl utl_fileSybase数据库似乎没有什么办法直接访问操作系统文件,除了调用XP服务和Java函数。Oracle的功能则要丰富很多。utl_file包可以用于操作数据库服务器上的文件,能否用于操作客户端系统文件呢?听到过这种说法,然而自己还没有花时间去研究文档和验证。然而这仍然提供了一种非常有用的选择。而dbms_metadata.get_ddl则提供了一种方便的获取数据库中指定对象的ddl方法,两者配合能完成一些非常有用的工作。

下面是Oracle中这两个包的简单的例子:

CREATE OR REPLACE PROCEDURE writeobj IS
amount BINARY_INTEGER :=1;
length_count int;
position int:=1;
data_buffer VARCHAR2 (1);
file1 utl_file.file_type;
res clob;
BEGIN
--create or replace directory FILEPATH as '/home/sunw/tk';
  file1:=utl_file.fopen('/home/sunw/tk','testout.out','W');  --打开utl文件,第一个为路径,第二参为文件名,第三指定为'w'方式。
--SET SERVEROUTPUT ON;
--SET LINESIZE 1000;
--SET FEEDBACK OFF;
--set long 999999;             ------显示不完整
--SET PAGESIZE 1000;    ----分页
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);  --指定不导出storage信息。
res:=DBMS_METADATA.GET_DDL('TABLE','CK_RS');   --生成table对象ck_rs的ddl信息。res为返回的clob类型。
length_count := dbms_lob.getlength(res);
WHILE length_count > 0 LOOP
dbms_lob.read (res, amount, position, data_buffer);
utl_file.put (file1, data_buffer);
position := position + 1;
length_count := length_count - 1;
data_buffer := null;
END LOOP;
utl_file.fclose(file1); --关闭文件。
END writeobj;

 

 

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/409.html

发表评论

邮箱地址不会被公开。 必填项已用*标注