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。

 

posted @ 2011-08-28 23:20  郭振斌  阅读(887)  评论(0编辑  收藏  举报