Я пытаюсь прочитать файл в мою таблицу оракулов в виде большого двоичного объекта.Файл данных * .gz.Я посмотрел в сети и нашел несколько примеров, и вот что я придумал:
create or replace PROCEDURE upload_supp_data
IS
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
data_dir varchar2(20) := '/tmp/';
file_name varchar2(50) := '200912020200.rep-ids-top50-sip.txt.gz';
BEGIN
src_file := BFILENAME (data_dir, file_name);
-- insert a NULL record to lock
INSERT INTO alarms_supplemental
(alarm_id, resource_id, supplementaldata
)
VALUES (13794740, 1, EMPTY_BLOB ()
)
RETURNING supplementaldata
INTO dst_file;
-- lock record
SELECT supplementaldata
INTO dst_file
FROM alarms_supplemental
WHERE alarm_id = 13794740
FOR UPDATE;
-- open the file
DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly);
-- determine length
lgh_file := DBMS_LOB.getlength (src_file);
-- read the file
DBMS_LOB.loadfromfile (dst_file, src_file, lgh_file);
-- update the blob field
UPDATE ALARMS_SUPPLEMENTAL
SET supplementaldata = dst_file
WHERE ALARM_ID = 13794740;
-- close file
DBMS_LOB.fileclose (src_file);
END upload_supp_data;
При запуске я получаю следующие ошибки:
ORA-22285: non-existent directory or file for FILEOPEN operation
ORA-06512: at "SYS.DBMS_LOB", line 635
ORA-06512: at "AIP_DBA.UPLOAD_SUPP_DATA", line 29
ORA-06512: at line 2
Process exited.
Я поиграл с путями разными способами, то есть '/ tmp /', 'tmp', '/ tmp'.Имя файла правильное, поэтому я не понимаю, что не так.На самом деле это первая хранимая процедура, которую я когда-либо написал, так что это может быть очень простой вещью.Я надеюсь, что кто-то может помочь мне с этим.Кстати, я использую Oracle SQL Developer.