如果我在PL / SQL中拥有文件的路径,如何获取文件夹的数量?

时间:2017-08-02 12:40:45

标签: plsql plsqldeveloper

我想查找指定路径中存在的文件夹的数量

例如'C:\ Users \ abc'

获取此路径中存在的文件数的代码是什么?

1 个答案:

答案 0 :(得分:0)

我发现有一种方法可以使用SYS.DBMS_BACKUP_RESTORE.SEARCHFILES在纯PL / SQL中执行此操作。它涉及授予一些奇怪的权利。我自己没有测试过。您可以找到更多详细信息here

基本上,您创建目录,以及列出目录中文件的pipelined function。然后你可以简单地计算它们。

create type file_array as table of varchar2(100)
/


CREATE OR REPLACE FUNCTION COUNT_FILES (lp_string IN VARCHAR2 default null)
RETURN file_array pipelined AS

lv_pattern VARCHAR2(1024);
lv_ns VARCHAR2(1024);

BEGIN

SELECT directory_path
INTO lv_pattern
FROM dba_directories
WHERE directory_name = '<YOUR_DIR_NAME>';

SYS.DBMS_BACKUP_RESTORE.SEARCHFILES(lv_pattern, lv_ns);

FOR file_list IN (SELECT FNAME_KRBMSFT AS file_name
FROM X$KRBMSFT
WHERE FNAME_KRBMSFT LIKE '%'|| NVL(lp_string, FNAME_KRBMSFT)||'%' ) LOOP
PIPE ROW(file_list.file_name);
END LOOP;

END;
/


grant execute on LIST_FILES to public;
create public synonym list_files for sys.LIST_FILES;

然后你可以运行你的查询:

select count from table(list_files);

如果您没有这些权限,唯一的方法是使用外部Java或C例程,并从PL / SQL调用它来为您完成。 Java有许多examples