问题描述
当我使用UTL_FILE.fgetATTR时,块大小每次都返回0。我可以获取文件长度等信息,但是块大小返回0。这可能是什么原因,我该如何解决? 作业系统:Windows 10 DB:19c
DECLARE
v_fexists BOOLEAN;
v_file_length NUMBER;
v_block_size BINARY_INTEGER;
BEGIN
UTL_FILE.fgetATTR ('TEST_DIR','temp file.txt',v_fexists,v_file_length,v_block_size);
IF v_fexists THEN
DBMS_OUTPUT.PUT_LINE('The file exists');
DBMS_OUTPUT.PUT_LINE('Its length is :'||v_file_length);
DBMS_OUTPUT.PUT_LINE('Its block size is :'||v_block_size);
ELSE
DBMS_OUTPUT.PUT_LINE('The file does not exist!');
END IF;
END;
PL/sql procedure successfully completed.
The file exists
Its length is :2794
Its block size is :0
解决方法
我只是发布每个人都知道的答案,您可以将问题标记为已回答。它或多或少是我们在评论部分一直在谈论的一切的回忆。
在Windows平台上,UTL_FILE.FGETATTR过程返回0而不是 正确的块大小,即使文件存在。 Windows平台不提供任何系统子例程来获取文件系统I / O块大小,因此它返回0,这是预期的行为。
尽管已经预测并记录了9i / 10g的问题,但是在12c,18c和19c上也可以重现该问题。