zoukankan      html  css  js  c++  java
  • 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。

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    葵花宝典,参考学习网站收藏
    安卓工具
    马帮
    C89:vs输出调试信息
    OSG:中级篇 拖拽器类
    OSG:幼儿园篇 第六章 碰撞检测类
    OSG:幼儿园篇 第三章 节点坐标变换类
    OSG:幼儿园篇 第五章 界面交互类
    C++11:智能指针
    OSG:幼儿园篇 第四章 节点回调类
  • 原文地址:https://www.cnblogs.com/benio/p/2156549.html
Copyright © 2011-2022 走看看