3

由于 SQL 和 PL/SQL 引擎之间的上下文切换,在 SQL 语句中调用函数是否会对性能产生影响?还是潜在影响取决于调用的函数?

  1. 调用内置函数:
从 TABLE_NM 中选择 dbms_crypto.hash(utl_raw.cast_to_raw(COLUMN),1);
  1. 调用 PL/SQL 函数:
创建或替换包 PCK 为
  函数doSomething(val varchar2)返回varchar2;
结束 PCK;

从 TABLE_NM 中选择 PCK.doSomething(COLUMN)

函数调用是否存在性能开销?谢谢。

4

1 回答 1

2

调用内置函数:

这取决于。但是,大多数本机 SQL 函数内置函数都以低级“ C 语言”编译为Oracle 内核中的单个模块。例如,CASE或者UPPER函数不会在两个引擎之间进行任何上下文切换,因为我说它们在一个模块中。

嗯,有一些内置函数是异常的,比如SYSDATE等等。Thomas Kyte在这里做了很好的解释USER

调用 PL/SQL 函数

PL/SQL 中的SQL 调用,反之亦然,即SQL 中的 PL/SQL 调用需要上下文切换。从 SQL 到 PLSQL 存在调用开销(当 SQL 调用 PLSQL 时,“命中”最为明显——当 SQL 嵌入 PLSQL 时,反之则不然)。

于 2015-11-17T11:21:47.910 回答