PLSQL笔记 存在性检查

典型的例子:

查看是否存在一条记录满足<特定条件> 。存在则<做一些处理>。

例如:检查是否有员工上个月聘用的。

 差劲的SQL:


select   count ( * )

  
from  emp

where  hiredate  >  trunc(sysdate, ' MM ' );

这是一个差劲的SQL,因为我们并不需要员工数量。通过对结果集的所有记录计数,从而验证至少有一行是满足条件的,这样并不高效。

 


 PL/SQL的方案,可以用显式游标和%FOUND属性来执行单个的读取。

CREATE   OR   REPLACE   FUNCTION  IS_EMP_THERE  RETURN   VARCHAR2   IS
    
CURSOR  C  IS
        
SELECT   1
          
FROM  emp
         
WHERE  hiredate  >  TRUNC(SYSDATE,  ' MM ' );
    r 
NUMBER ;
    v 
VARCHAR2 ( 3 );
BEGIN
    
OPEN  C;
    
FETCH  c
        
INTO  r;
    
IF  c % FOUND  THEN
        v :
=   ' YES ' ;
    
ELSE
        v :
=   ' NO ' ;
    
END   IF ;
    
CLOSE  c;
    
RETURN  v;
END ;

 虽然读取单个记录确实比读取结果集的所有记录高效,但这个方法是PLSQL的方法,当有适合的SQL方法可以使用时,尽量使用SQL,因为SQL会比PLSQL高效得多。

 


SQL解决方法:

SELECT   COUNT ( 1 )
  
FROM  dual
 
WHERE   EXISTS  ( SELECT   NULL
          
FROM  emp
         
WHERE  hiredate  >  TRUNC(SYSDATE,  ' MM ' ));

 结果:如果存在返回1,不存在返回0,所以根本不需要使用PLSQL。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值