oracle账号和密码是什么使用UTL_FILE类进行导出多个文件

使用UTL_FILE类进行导出多个文件

 

需求:将ALL_OBJECTS按照3000条一个文件进行导出,比如6001条记录,就应该导出三个文件,第一个和第二个文件都是3000条,最后一个文件应该是1条。

下面的例子是使用SCOTT用户下的ALL_OBJECTS为例,除了常见的SPOOL等方式之外,还可以使用UTL_FILE包进行导出,代码大致如下:

 

–创建一个DIRECTORY UT 指向操作系统中的D盘目录(最好是用具有DBA权限的用户操作)

CREATE DIRECTORY UT AS 'D:\';

–授权读、写

GRANT WRITE,READ ON DIRECTORY UT TO PUBLIC;

–执行下面的PL/SQL块

DECLARE

    V_F1 UTL_FILE.FILE_TYPE;

BEGIN

    –外层循环得到内层循环BETWEEN的最小值和最大值

    FOR J IN (SELECT (LEVEL – 1) * 3000 MINVAL, LEVEL * 3000 MAXVAL

                FROM DUAL

              CONNECT BY LEVEL <=

                         (SELECT COUNT(1) FROM ALL_OBJECTS) / 10000 + 1) LOOP

        V_F1 := UTL_FILE.FOPEN('UT', 'DATA' || J.MAXVAL || '.TXT', 'W');

        –内层循环,获取需要导出的数据

        FOR I IN (SELECT T.OWNER, T.OBJECT_NAME

                    FROM (SELECT ALL_OBJECTS.*,ROW_NUMBoracle账号ER() OVER(ORDER BY OBJECT_NAME) RN FROM ALL_OBJECTS) T

                   WHERE RN BETWEEN J.MINVAL AND J.MAXVAL) LOOP

             –行数据依次写入文件

            UTL_FILE.PUT_LINE(V_F1, I.OWNER || I.OBJECT_NAME);

        END LOOP;

        UTL_FILE.FCLOSE(V_F1);

    END LOOP;

END;

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。