2017-08-02 15 views

回答

0

有一種方法,我發現在純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

相關問題