Oracle11g Oracle循环文件列表

Oracle11g Oracle循环文件列表,oracle11g,Oracle11g,我正在编写一个使用Oracle11g移动一些文件的过程。在任何一天都可以生成大约5种不同类型的日志/dsc文件。虽然并不是所有的都能保证被创建。我计划用附加的日期重命名该文件,并移动到相应的子目录 我理想的做法是通过这个过程一次性移动所有文件。我从未在PL/SQL中尝试过这一点 我通常使用一个文件名数组,并对它们进行迭代。但我不知道如何在甲骨文中做到这一点。我目前的解决方案是直接调用过程,每次都将文件名作为参数传递给它。但我想要更自动化的东西,不知道该怎么做 CREATE OR REPLACE

我正在编写一个使用Oracle11g移动一些文件的过程。在任何一天都可以生成大约5种不同类型的日志/dsc文件。虽然并不是所有的都能保证被创建。我计划用附加的日期重命名该文件,并移动到相应的子目录

我理想的做法是通过这个过程一次性移动所有文件。我从未在PL/SQL中尝试过这一点

我通常使用一个文件名数组,并对它们进行迭代。但我不知道如何在甲骨文中做到这一点。我目前的解决方案是直接调用过程,每次都将文件名作为参数传递给它。但我想要更自动化的东西,不知道该怎么做

CREATE OR REPLACE PROCEDURE FTP_MOVER(i_dir VARCHAR2, i_file VARCHAR2) AS

v_file_append VARCHAR2(50);
v_file_rename VARCHAR2(50);
v_destination_dir VARCHAR2(50);

BEGIN

        -- append date
        v_file_append := TO_CHAR(TRUNC(SYSDATE), 'YYYYMMDD');
        -- new file name
        v_file_rename := v_file_append||i_file;

        IF SUBSTR(i_file, -3) = 'log' THEN

            -- set log destination dir
            v_destination_dir := 'HISTORY_LOG';

        ELSE IF SUBSTR(i_file, -3) = 'dsc' THEN

            -- set log destination dir
            v_destination_dir := 'HISTORY_DSC';

            END IF;

        END IF;

        -- move log file to history/log
        UTL_FILE.FRENAME(i_dir,
                         i_file, 
                         v_destination_dir, 
                         v_file_rename);                        

END FTP_TIDY;

与简单的操作系统脚本相比,在pl/sql中这样做有什么优势?@OldProgrammer没有优势。它只是需要作为DB应用程序管理的一部分来完成,据我所知,没有pl/sql函数可以扫描目录。您需要编写一个java存储过程来调用。请看这里-@OldProgrammer我想可能是这样,我想知道您是否可以使用文件名的array()并遍历数组。我相信它们存在于甲骨文中。然而,我从来没有遇到过一段利用它们的代码。@Jonny不需要Java外部RPC。这篇文章链接回了老程序员指出的Asktom文章,但当然需要一些操作系统级脚本来列出文件(如.sh、.ksh或.bat脚本)作为外部表的预处理器。