我的 Oracle DB 中有两种自定义类型
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;
这很好用,但是 oracle 将 CLOB 值缓存到当前会话的临时存储中。
这个存储可以在v$session
系统表中观察到。
我的问题是我的应用程序中只有一个 Oracle 会话,而且这个存储很快就会被填满。
1)在这种情况下,为什么 oracles 缓存 clob?
2) 我可以在我的函数中关闭缓存 CLOB 值吗?
我也尝试过非管道功能,但 rhis 没有帮助。