#windows #oracle #oracle19c #utl-file
#Windows #Oracle #oracle19c #utl-файл
Вопрос:
Когда я использую 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
Комментарии:
1. можете ли вы привести пример? потому что, если файл существует, он должен возвращать размер блока
2. Я считаю, что это что-то связанное с Windows. Потому что я провел тот же тест в Linux, и он работает без проблем (та же версия базы данных)
3. вы пробовали в другом каталоге? Возможно, проблема в Windows 10, которая не является версией ОС Windows Server. Я не могу протестировать Windows на своей стороне:(
4. Я думаю, что это все еще ожидается в Windows; смотрите Документ ID 274466.1 в моей службе поддержки Oracle. Это относится только к 9i / 10g, но не видно, что это, вероятно, изменилось. (Похоже, ошибка документации, если это так, хотя …)
5. @AlexPoole , хороший улов. Действительно, это причина 😉 Я просто уточняю у одного парня из службы поддержки, и документ применяется к каждой версии Oracle, хотя в нем указано только 9i / 10g.
Ответ №1:
Я просто публикую ответ, который всем известен, и вы можете пометить вопрос как ответ. Это более или менее воспоминание обо всем, о чем мы говорили в разделе комментариев.
На платформах Windows процедура UTL_FILE.FGETATTR возвращает 0 вместо правильного размера блока, даже если файл существует. Платформа Windows не предоставляет никакой системной подпрограммы для получения размера блока ввода-вывода файловой системы, в результате она возвращает 0, что является ожидаемым поведением.
Хотя это предсказано и задокументировано для 9i / 10g, проблема также воспроизводима на 12c, 18c и 19c.