UTL_FILE.FGETATTR返回0作为块大小

问题描述

当我使用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上也可以重现该问题。

Link to Support Note