作者热门文章
- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
ORACLE 数据库中最快的是什么?
在 select 语句中调用函数以检索每一行的单个值
SELECT field1, field2, F_GET_LIBELLE_STATUT( field2 ) FROM table1 WHERE ...
create or replace
FUNCTION "F_GET_LIBELLE_STATUT" (v_statut NUMBER) RETURN VARCHAR2 IS
tmpVar VARCHAR2(40);
BEGIN
select libelle into tmpVar from t_statut_ope where id_statut = v_statut;
RETURN tmpVar;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN '';
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END f_get_libelle_statut;
Select a.field1, a.field2, b.libelle
FROM table1 a LEFT JOIN t_statut_ope b ON b.id_statut = a.field2
WHERE ...
最佳答案
任何可以在 SQL 中完成的事情都应该在 SQL 中完成 (*) .
连接总是比调用该函数快,因为基于集合的操作总是比通过痛苦的行快。然后你有在 SQL 和 PL/SQL 之间移动的开销。加上处理那些 NO_DATA_FOUND 异常的开销,这些异常并不是真正的异常,因为间隙是预期和容忍的。最后,优化器将为纯 SQL 选项选择一个更好的计划,因为您已经为它提供了它需要的所有信息。
(*) 我在很久以前就回答了这个问题,我回答的重点是给出的例子,我支持这个答案。如果我们可以使用 SQL 对表(通过连接、 View 、内联 View 、子查询)获取我们需要的数据,那么我们应该这样做。但我想深入探讨一个根本问题:为什么 Oracle 支持在查询中使用函数?因为有时我们需要做一些我们在 SQL 中做不到的事情。
以下是调用执行 SQL 的函数的用例(我主要考虑通过 table()
调用调用的函数)而不是使用连接(或其他 SQL 构造,例如内联 View 、WITH 子句):
关于sql - 优化一条 SQL 查询 : call a function or do a join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10426563/
我是一名优秀的程序员,十分优秀!