我想查找指定路径中存在的文件夹的数量
例如'C:\ Users \ abc'
获取此路径中存在的文件数的代码是什么?
答案 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