2
什麼會導致以下行爲打開它:不能使用dbms_lob.filopen打開的文件,但可以使用UTL_FILE
數據庫11gR2的
declare
l_amt number := dbms_lob.lobmaxsize;
l_dst_loc clob;
l_dst_offset number := 1;
l_lang_ctx number := dbms_lob.default_lang_ctx;
l_src_loc bfile;
l_src_offset number := 1;
l_warning number;
begin
l_src_loc := bfilename('ODS_SERVER_DIRECTORY', '_CIVKD_ASU.CSV');
dbms_lob.createtemporary(l_dst_loc, true);
dbms_lob.fileopen(l_src_loc, dbms_lob.file_readonly);
dbms_lob.loadclobfromfile(l_dst_loc
,l_src_loc
,l_amt
,l_dst_offset
,l_src_offset
,dbms_lob.default_csid
,l_lang_ctx
,l_warning);
commit;
dbms_lob.fileclose(l_src_loc);
dbms_output.put_line(substr(l_dst_loc, 1, 200));
end;
/
ORA-22288: file or LOB operation FILEOPEN failed
.
ORA-06512: in "SYS.DBMS_LOB", line 805
ORA-06512: in line 31
22288. 00000 - "file or LOB operation %s failed\n%s"
*Cause: The operation attempted on the file or LOB failed.
*Action: See the next error message in the error stack for more detailed
information. Also, verify that the file or LOB exists and that
the necessary privileges are set for the specified operation. If
the error still persists, report the error to the DBA.
但是打開和使用UTL_FILE讀時完全相同的文件成功。
declare
l_file utl_file.file_type;
l_regel varchar2(4000);
begin
l_file := utl_file.fopen('ODS_SERVER_DIRECTORY', '_CIVKD_ASU.CSV', 'R');
-- Haal de volgende regel op
utl_file.get_line(l_file, l_regel);
dbms_output.put_line(l_regel);
utl_file.fclose_all;
end;
所以它看起來文件是可用的,並可由數據庫訪問。
這是我們第一次遇到這個特定的錯誤,它是第一個11gR2實例之一,所以也許有11g我們不知道?
===更新8-6-2012 === 取得了一些進展。事實證明,目錄對象指向共享驅動器。它是一個Windows服務器,Oracle作爲本地系統運行。我一直認爲在這種情況下無法從共享驅動器讀取任何內容。顯然在某些情況下,您可以使用utl_file但不使用dbms_lob。
僅僅因爲你不應該使用UTL_FILE_DIR並不意味着你的DBA不會堅持它。 –
謝謝,這絕對是一個目錄。一切都告訴我它應該工作,但它不是。最後的手段是重新啓動整個服務器,但這是不可能的。 – Rene