首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在varray查询中使用查询结果缓存

在varray查询中使用查询结果缓存
EN

Stack Overflow用户
提问于 2022-07-05 19:48:29
回答 1查看 37关注 0票数 -1

测试#1:

我有一个查询,它成功地调用了查询结果缓存提示:/*+ result_cache */

代码语言:javascript
复制
with data (id) as (
  select 1 from dual union all
  select 2 from dual
)
select /*+ result_cache */
    id
from
    data

解释计划中的第2行显示正在使用的结果缓存:

代码语言:javascript
复制
-----------------------------------------------------------------------------------------------
| 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列:

代码语言:javascript
复制
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

解释计划显示结果缓存不是正在使用的

代码语言:javascript
复制
-------------------------------------------------------------------------
| 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 |
-------------------------------------------------------------------------

db<>fiddle

问题:

在具有varray列的查询中有使用查询结果缓存的方法吗?

我不想使用将varray元素提取为字符串的解决方案。我希望在查询中使用适当的varray列,以及其他复杂的数据类型,如SDO_GEOMETRY。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 11:11:18

看起来,RESULT_CACHE不支持集合列。

高速缓存 对于具有OUT或IN参数的函数,不允许使用RESULT_CACHE。 对于具有IN、RESULT_CACHE或(或包含)以下类型的返回参数的函数,不允许使用:

  • 水滴
  • CLOB
  • NCLOB
  • 参考光标
  • 集合
  • 对象
  • 包含不支持的返回类型的记录或PL/SQL集合

匿名块中的函数不允许使用RESULT_CACHE。

流水表函数和嵌套函数不允许使用RESULT_CACHE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72874794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档