UTL_FILE.PUT_LINE 自動追加換行符,多次調用產生多行,需合併為單行;另需讀取本地文本文件。
UTL_FILE.PUT(file_handle, CONVERT(p_str1, 'AL32UTF8', 'ZHS16GBK'));
UTL_FILE.PUT(file_handle, CONVERT(p_str2, 'AL32UTF8', 'ZHS16GBK'));
UTL_FILE.PUT(file_handle, CONVERT(p_str3, 'AL32UTF8', 'ZHS16GBK'));
UTL_FILE.NEW_LINE(file_handle); -- 最後統一換行
DECLARE
v_content CLOB;
BEGIN
-- 讀取文件到 CLOB
SELECT UTL_FILE.GET_CLOB('DIR', 'file.txt') INTO v_content FROM dual;
-- 替換
v_content := REPLACE(v_content, CHR(10), ''); -- LF
v_content := REPLACE(v_content, CHR(13), ''); -- CR
-- 寫回
UTL_FILE.PUT('DIR', 'file.txt', v_content);
END;
CREATE OR REPLACE DIRECTORY ext_dir AS '/path/to/files';
-- 授權
GRANT READ, WRITE ON DIRECTORY ext_dir TO your_user;
DECLARE
f_handle UTL_FILE.FILE_TYPE;
v_line VARCHAR2(32767);
BEGIN
f_handle := UTL_FILE.FOPEN('EXT_DIR', 'data.txt', 'R', 32767);
LOOP
BEGIN
UTL_FILE.GET_LINE(f_handle, v_line);
-- 處理 v_line
DBMS_OUTPUT.PUT_LINE(v_line);
EXCEPTION
WHEN NO_DATA_FOUND THEN EXIT;
END;
END LOOP;
UTL_FILE.FCLOSE(f_handle);
END;
chown oracle:oinstall /path)。CREATE DIRECTORY 需 DBA 權限,路徑必須是服務器端絕對路徑,非客戶端路徑。BFILE / DBMS_LOB 流式處理,避免 PGA 爆炸。