Oracle-11g
從另一台機器更新數據庫表
我正在嘗試使用批處理文件更新我的數據庫。批處理文件位於機器上,比如說 ABC,它應該從 ABC 的本地目錄中選擇一個文本文件,然後將該文件上傳到位於 XYZ 機器上的數據庫中。
我收到一個錯誤
If you are using a remote database server, verify it has access to remote_basedir. ERROR>: Error is: [Oracle][ODBC][Ora]ORA-29913: error in executing ODCIEXTTABLEOPEN callout ERROR>: ORA-29400: data cartridge error ERROR>: KUP-04040: file testfile.txt in TEST_9F86D0818 not found
我正在呼叫在 NAVICAT 中創建的計劃以將 .txt 文件上傳到數據庫。
有與您的錯誤消息相關的 Oracle 支持說明ORA-29913:執行 ODCIEXTTABLEOPEN 標註時出錯(文件 ID 458620.1) 。您有一個外部表 (ORGANIZATION EXTERNAL),其數據位於 Oracle 目錄“TEST_9F86D0818”中的文件“testfile.txt”中。
支持說明說,如果包含文件 testfile.txt 的 os 目錄沒有適當的權限,就會發生這種情況。
因此,讓我們檢查該文件是否不存在,或者該文件或它所在的 os 目錄的 os 權限是否存在問題。
- 找出Oracle目錄“TEST_9F86D0818”的路徑
select directory_path from all_directories where directory_name='TEST_9F86D0818';
- 假設 1 中的 directory_path 檢索是 ‘/u01/app/oracle/data’ 或 ‘C:\u01\app\oracle\data’ 如果您在 Windows 系統上。然後登錄數據庫伺服器並檢查’/u01/app/oracle/data/testfile.txt’(C:\u01\app\oracle\data\testfile.txt)是否存在。
- 假設在您的數據庫伺服器上執行您的 Oracle 軟體的使用者是
oracle
. 通常這是在 Linux 伺服器上的情況。然後檢查此使用者是否可以讀取 testfile.txt:head /u01/app/oracle/data/testfile.txt > /dev/null
或者
type C:\u01\app\oracle\data\testfile.txt > NUL
如果您使用的是 Windows 系統。如果這會生成錯誤消息,那麼這就是您必須消除問題的原因。 4. 使用有權訪問目錄並可以執行 UTIL_FILE 包的使用者(例如 dba 使用者)使用 sqlplus 連接到數據庫並執行以下命令:
DECLARE V1 VARCHAR2(32767); F1 UTL_FILE.FILE_TYPE; BEGIN F1 := UTL_FILE.FOPEN('TEST_9F86D0818','testfile.txt','R'); UTL_FILE.GET_LINE(F1,V1); UTL_FILE.FCLOSE(F1); exception when others then dbms_output.put_line('ERROR: ' || SQLCODE || ' - ' || SQLERRM); raise; END; /
如果出現錯誤,這就是您必須消除問題的原因。如果沒有出現錯誤,請向我們展示您的外部表的創建語句。