如果我在 PL/SQL 中有文件的路径,如何获取文件夹的数量?
Posted
技术标签:
【中文标题】如果我在 PL/SQL 中有文件的路径,如何获取文件夹的数量?【英文标题】:how to get the count of folders if i am having the path of the file in PL/SQL? 【发布时间】:2017-08-02 12:40:44 【问题描述】:我想查找指定路径中存在的文件夹的数量
例如'C:\Users\abc'
获取此路径中存在的文件数量的代码是什么?
【问题讨论】:
【参考方案1】:我发现在纯 PL/SQL 中使用SYS.DBMS_BACKUP_RESTORE.SEARCHFILES
可以做到这一点。它涉及授予一些奇怪的权利。虽然我自己没有测试过。您可以找到更多详情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
【讨论】:
以上是关于如果我在 PL/SQL 中有文件的路径,如何获取文件夹的数量?的主要内容,如果未能解决你的问题,请参考以下文章
获取 ORA-06503 的原因:PL/SQL:函数返回没有值?
如何在 SQL 或 PL/SQL 中查找给定字符串(列数据)中的第 5 个字符? [关闭]