У меня есть два пользовательских типов в моей БД OracleOracle кэширует CLOB к временной таблице
TYPE SETTING IS OBJECT (
SETT_NAME VARCHAR2(32767),
SETT_VALUE CLOB,
);
TYPE SETTINGS_SET IS TABLE OF SETTING;
И у меня есть простая функция, которая возвращает SETTINGS_SET
FUNCTION Revision RETURN SETTINGS_SET PIPELINED IS
INSTANCE SETTING;
BEGIN
-- body is simplified for example
INSTANCE = SETTING('Id', 'Long clob value');
PIPE ROW(INSTANCE);
END;
или не конвейерную функцию
FUNCTION Revision RETURN SETTINGS_SET IS
SET SETTINGS_SET = SETTINGS_SET();
BEGIN
-- body is simplified for example
SETTINGS_SET(1) := SETTING('Id', 'Long clob value');
END;
И это хорошо работает, но оракул кэширует значение CLOB для временного хранения для текущего сеанса.
Это хранилище можно найти в системном столе v$session
.
Моя проблема заключается в том, что у меня в моем приложении только один сеанс Oracle, и это хранилище быстро заполняется.
1) Почему оракулы скрываются в этом случае?
2) Можно ли отключить кеширование значений CLOB в моей функции?
Также я пробовал функцию не-трубопроводов, но rhis не помог.
Если вам нужно пройдите вокруг большого количества данных, тогда вам понадобятся большие объемы памяти, бот h диском и оперативной памятью. Разве вы не можете открыть вторую сессию? Кажется, что немного на маленькой стороне. – Ben
слишком занят, чтобы создать пример atm, но попробуйте dbms_lob.freetemporary (your_clob) после строки строки. По умолчанию temp clobs будет очищать (в конечном итоге), когда выходит из области видимости, что может занять много времени в зависимости от того, сколько строк вы используете здесь. – tbone
@tbone У меня есть исключение «ORA-22275: недопустимый локатор больших объектов», потому что я не создаю CLOB с 'dbms_lob.createtemporary' – Ilya