首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 讀寫外部檔案完整指南:DIRECTORY、UTL_FILE、BFILE 實戰

     編輯:Oracle 資料庫基礎

核心物件:DIRECTORY

Oracle 透過 CREATE DIRECTORY 將 OS 路徑映射為資料庫物件,再授權給使用者:

CREATE OR REPLACE DIRECTORY exp_dir AS '/tmp';
GRANT READ, WRITE ON DIRECTORY exp_dir TO eygle;

UTL_FILE 套件:文字檔讀寫

寫入範例

DECLARE
  fh UTL_FILE.FILE_TYPE;
BEGIN
  fh := UTL_FILE.FOPEN('UTL_FILE_DIR', 'example.txt', 'W');
  UTL_FILE.PUT_LINE(fh, 'eygle test write one');
  UTL_FILE.PUT_LINE(fh, 'eygle test write two');
  UTL_FILE.FCLOSE(fh);
END;
/

讀取範例

DECLARE
  fh UTL_FILE.FILE_TYPE;
  buf VARCHAR2(4000);
BEGIN
  fh := UTL_FILE.FOPEN('UTL_FILE_DIR', 'example.txt', 'R');
  UTL_FILE.GET_LINE(fh, buf); DBMS_OUTPUT.PUT_LINE(buf);
  UTL_FILE.GET_LINE(fh, buf); DBMS_OUTPUT.PUT_LINE(buf);
  UTL_FILE.FCLOSE(fh);
END;
/

BFILE / DBMS_LOB:二進位大物件讀取

適用於圖片、PDF 等二進位檔:

DECLARE
  v_bfile BFILE;
  v_content VARCHAR2(1800);
  v_amt INTEGER;
  v_off INTEGER := 1;
BEGIN
  v_bfile := BFILENAME('USER_DIR', 'test.txt');
  v_amt := DBMS_LOB.GETLENGTH(v_bfile);
  DBMS_LOB.OPEN(v_bfile);
  DBMS_LOB.READ(v_bfile, v_amt, v_off, v_content);
  DBMS_LOB.CLOSE(v_bfile);
  DBMS_OUTPUT.PUT_LINE(v_content);
END;
/

管理與查詢

-- 查看所有 DIRECTORY
SELECT * FROM dba_directories;

-- 刪除 DIRECTORY(不刪除 OS 檔案)
DROP DIRECTORY exp_dir;

權限與安全提醒

  • 目錄路徑需 Oracle 執行身分具備 OS 讀寫權限(chmod/ACL)。
  • 僅授予必要使用者 READ/WRITE,避免 PUBLIC 全開。
  • 12c+ 可使用 PDB 級 DIRECTORY 隔離。

結語

DIRECTORY + UTL_FILE 處理文字檔,BFILE + DBMS_LOB 處理二進位檔,是 Oracle 與外部檔案系統交互的標準方式。善用 UTL_FILE.FGETATTR 檢查檔案存在與權限,可增強程式健壯性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved