Sybase数据库似乎没有什么办法直接访问操作系统文件,除了调用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