测试#1:
我有一个查询,它成功地调用了查询结果缓存提示:/*+ result_cache */。
with data (id) as (
select 1 from dual union all
select 2 from dual
)
select /*+ result_cache */
id
from
data解释计划中的第2行显示正在使用的结果缓存:
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 6 | 4 (0)| 00:00:01 |
| 1 | RESULT CACHE | 478vfsvhadjt55zu0vzbphb9f5 | | | | |
| 2 | VIEW | | 2 | 6 | 4 (0)| 00:00:01 |
| 3 | UNION-ALL | | | | | |
| 4 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 5 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Result Cache Information (identified by operation id):
------------------------------------------------------
1 - column-count=1; name="..."测试2:
下一个查询是相同的,但我添加了一个varray列:
with data (id, my_array) as (
select 1, sys.odcivarchar2list('a', 'b', 'c') from dual union all
select 2, sys.odcivarchar2list('d', 'e') from dual
)
select /*+ result_cache */
id,
my_array
from
data解释计划显示结果缓存不是正在使用的。
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 74 | 4 (0)| 00:00:01 |
| 1 | VIEW | | 2 | 74 | 4 (0)| 00:00:01 |
| 2 | UNION-ALL | | | | | |
| 3 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 4 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------问题:
在具有varray列的查询中有使用查询结果缓存的方法吗?
我不想使用将varray元素提取为字符串的解决方案。我希望在查询中使用适当的varray列,以及其他复杂的数据类型,如SDO_GEOMETRY。
发布于 2022-07-06 11:11:18
看起来,RESULT_CACHE不支持集合列。
高速缓存 对于具有OUT或IN参数的函数,不允许使用RESULT_CACHE。 对于具有IN、RESULT_CACHE或(或包含)以下类型的返回参数的函数,不允许使用:
匿名块中的函数不允许使用RESULT_CACHE。
流水表函数和嵌套函数不允许使用RESULT_CACHE。
https://stackoverflow.com/questions/72874794
复制相似问题