oracle将select语句改为存储,为什么我们不能在oracle中的select语句中执行存储过程?有什么有力的理由吗?...

SQL语句中不允许使用过程,因为混合声明性和命令式编程样式会让人感到困惑.

SQL语句是一个条件列表 – 由Oracle决定如何生成与这些条件匹配的结果集. PL / SQL存储过程是一组以非常可预测的方式改变事物的指令.

在下面的例子中,应该执行多少次?它是在id = 1之前还是之后执行的?如果SQL语句具有预定义的顺序,那么优化器将无法推送谓词,合并子查询等,并且性能将是不可接受的.

select *

from table1

where id = 1

and pr;

即使在选择列表中使用了一个过程,它也可能没有意义.例如,始终忽略exists中的选择列表.

select * from dual where exists (select pr from dual);

但实际上,SQL语句有时需要与外界进行交互,并且需要一些程序逻辑.允许函数,因为它们通常只是计算某些东西并返回一个值.函数通常不依赖于程序状态,并且有很多副作用.您的函数可以使用会话变量,更新表(如果它设置为PRAGMA AUTONOMOUS TRANSACTION),设置上下文等.Oracle不能阻止您执行这些操作,但禁止SQL语句中的过程将至少阻止此类代码.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值