如果我在 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 中有文件的路径,如何获取文件夹的数量?的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL:如何在异常中获取 ORA 代码?

获取 ORA-06503 的原因:PL/SQL:函数返回没有值?

如何从替换过程(PL/SQL)中获取旧代码?

如何在 SQL 或 PL/SQL 中查找给定字符串(列数据)中的第 5 个字符? [关闭]

PL/SQL:如何运行存储在表列中的sql语句来获取sql语句的执行时间?

使用 Oracle PL/SQL 扩展 zip 流