自治数据库确实提供对“目录”和“文件”的访问。在幕后,这些是作为虚拟文件系统实现的,存储来自您的数据库,因此它作为数据库配额向您收费。这有点尴尬,但如果您能够将输入加载到 BLOB 中,则可以使用 PL/SQL 过程将文件放入此文件系统:
PROCEDURE write_file(
directory_name IN VARCHAR2,
file_name IN VARCHAR2,
contents IN BLOB
)
IS
l_file UTL_FILE.file_type;
l_data_len INTEGER;
l_buffer RAW(32000);
l_pos INTEGER := 1;
l_amount INTEGER := 32000;
BEGIN
-- Get the data length to write
l_data_len := DBMS_LOB.getlength(contents);
-- Write the contents to local file
l_file := UTL_FILE.FOPEN(directory_name, file_name, 'wb', l_amount);
WHILE l_pos < l_data_len
LOOP
DBMS_LOB.read(contents, l_amount, l_pos, l_buffer);
UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
l_pos := l_pos + l_amount;
END LOOP;
UTL_FILE.FCLOSE(l_file);
EXCEPTION
WHEN OTHERS THEN
UTL_FILE.FCLOSE(l_file);
RAISE;
END write_file;
如何将数据放入 BLOB 取决于您的客户。