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。

 

你可能感兴趣的:(plsql)