Пожалуйста, помогите мне решить следующую проблему:
У меня проблема с триггером для экспорта данных BLOB-объектов из oracle db в каталог.«Экспортный скрипт», который запускается с помощью триггера, работает нормально, поэтому мои данные BLOB-объектов экспортируются в виде файла изображения.Но каждый раз, когда используется триггер, экспортируется не текущий файл изображения, а предпоследняя запись большого двоичного объекта в БД.Вот код для триггера:
create or replace TRIGGER EXP_IMG AFTER INSERT OR UPDATE OF LAST_UPDATE
ON baeume
for each row
when (OLD.LAST_UPDATE != NEW.LAST_UPDATE OR NEW.LAST_UPDATE is not null)
declare
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
DECLARE
t_blob BLOB;
t_len NUMBER;
t_file_name VARCHAR2(1000);
t_output UTL_FILE.FILE_TYPE;
t_TotalSize NUMBER;
t_position NUMBER := 1;
t_chucklen NUMBER := 32767;
t_chuck RAW(32767);
t_remain NUMBER;
BEGIN
FOR var_a IN
(
SELECT GUID, last_update
FROM baeume
WHERE image IS NOT NULL
ORDER BY guid
)
LOOP
BEGIN
--t_blob BLOB;
t_len := 0;
t_file_name := '';
--t_output UTL_FILE.FILE_TYPE;
t_TotalSize := 0;
t_position := 1;
t_chucklen := 32767;
--t_chuck := (4096);
t_remain := 0;
SELECT DBMS_LOB.GETLENGTH (image), TO_CHAR (guid) || '.jpg'
INTO t_TotalSize, t_file_name
FROM baeume
WHERE guid = var_a.guid;
t_remain := t_TotalSize;
t_output := UTL_FILE.FOPEN ('DIR_IMG', t_file_name, 'wb', 32760);
SELECT image
INTO t_blob
FROM baeume
WHERE guid= var_a.guid;
WHILE t_position < t_TotalSize
LOOP
DBMS_LOB.READ (t_blob, t_chucklen, t_position, t_chuck);
UTL_FILE.PUT_RAW (t_output, t_chuck);
UTL_FILE.FFLUSH (t_output);
t_position := t_position + t_chucklen;
t_remain := t_remain - t_chucklen;
IF t_remain < 4096
THEN
t_chucklen := t_remain;
END IF;
END LOOP;
UTL_FILE.FCLOSE (t_output);
END;
END LOOP;
END;
END;
thx chsc