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

  • 相关阅读:
    搜索文件/目录的shell脚本
    git的编译安装
    linux命令行直接执行MySQL/MariaDB语句查询
    MySQL重置root密码
    图解TCP/IP三次握手
    使用pull命令从Docker Hub仓库中下载镜像到本地
    BZOJ1051 [HAOI2006]受欢迎的牛(Tarjan缩点)
    BZOJ1026 [SCOI2009]windy数(数位DP)
    CERC2017 H Hidden Hierarchy(树+模拟)
    2018icpc徐州网络赛-H Ryuji doesn't want to study(线段树)
  • 原文地址:https://www.cnblogs.com/benio/p/2156549.html
Copyright © 2011-2022 走看看