暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 内联查询与存储过程

askTom 2017-04-04
331

问题描述

使用内联查询而不是使用存储过程有什么缺点?
内联查询与存储过程的性能影响是什么?

谢谢

专家解答

这个问题真的没有任何意义。这些不是互斥的选择!

您可以在存储过程中有一个内联查询:

create or replace procedure p is
  var int;
begin
  select col
  into   var 
  from (
    select 1 col from dual
  );
  
  dbms_output.put_line(var);
end p;
/
      
exec p;

PL/SQL procedure successfully completed.
1


实际上,将所有查询放在存储过程中是一个好主意。有关原因的更多详细信息,请阅读Bryn Llewellyn的 “为什么PL/SQL?” 白皮书:

https://blogs.oracle.com/plsql-and-ebr/entry/why_use_pl_sql

但是从SQL调用PL/SQL通常不是一个好主意,原因有几个:

-它可以减慢您的查询速度
-如果PL/SQL运行SQL,则可能会获得意外/不正确的结果!

减速是由于上下文从SQL -> PL/SQL切换,然后再次返回:

http://www.oracle.com/technetwork/issue-archive/2015/15-jul/o45plsql-2543984.html

尽管12c “pragma udf” 确实减轻了这种情况:

https://mwidlake.wordpress.com/2015/11/04/pragma-udf-speeding-up-your-plsql-functions-called-from-sql/

要了解为什么SQL调用PL/SQL调用SQL可能会产生意外结果,请参阅:

https://blogs.oracle.com/sql/the-problem-with-sql-calling-plsql-calling-sql
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论