加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 百科 > 正文

Oracle 11gR2 – 查看功能列评估

发布时间:2021-01-12 03:17:25 所属栏目:百科 来源:网络整理
导读:副标题#e# 对于具有为列定义的函数以及何时评估这些函数的Oracle视图,我似乎有一个奇怪的问题. 假设我有以下视图和函数定义: CREATE OR REPLACE VIEW test_view_one ASSELECT column_one,a_package.function_that_returns_a_value(column_one) function_co

--------------------------------------------------------------------------------
 | Id  | Operation           | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
 --------------------------------------------------------------------------------
 |   0 | SELECT STATEMENT    |          |    25 |   975 |     2   (0)| 00:00:01 |
 |*  1 |  VIEW               |          |    25 |   975 |     2   (0)| 00:00:01 |
 |*  2 |   COUNT STOPKEY     |          |       |       |            |          |
 |   3 |    VIEW             |          |    26 |   676 |     2   (0)| 00:00:01 |
 |*  4 |     INDEX RANGE SCAN| TEST_IDX |    26 |   130 |     2   (0)| 00:00:01 |
 --------------------------------------------------------------------------------

这里只访问了所需的25行,因此该函数不能被称为N次.

现在重要的考虑因素,在A情况下,函数可以,但不需要为每一行调用.我们怎么看?

答案在解释计划的列投影中.

4 - (#keys=1) "ID"[NUMBER,"MY_PACKAGE"."MY_FUNCTION"("ID")[22]

相关的第4行显示,在SORT操作中调用该函数,因此每行都调用该函数. (排序获取所有行).

结论

我在11.2上的测试显示,在A(具有SORT ORDER BY STOPKEY的完全扫描)的情况下,调用视图函数
每排一次.
我想唯一的解决方法是只选择ID,限制结果,然后加入原始视图以获取函数值.

最后的笔记

我也在12.1中对此进行了测试,并在下面看到了列投影的变化.
该函数首先在VIEW(第3行)中计算,即两种情况都能正常工作.

Column Projection Information (identified by operation id):
 -----------------------------------------------------------
 ...
    3 - "A"."ID"[NUMBER,22]
    5 - "ID"[NUMBER,22]

当然在12c中,可以使用OFFSET的新功能 – FETCH NEXT.

祝好运!

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读