在Oracle中没有SQL中的if exists(...)的用法,所以可以用以下几种方法来替代

判断符合条件的个数是否为0

DECLARE cnt number;BEGINSELECT COUNT(*) INTO cnt FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = '130201';IF cnt = 0 THENDBMS_OUTPUT.PUT_LINE('无记录');END IF;
END;

先定义一个变量,将所要查询的条件写成一个SELECT语句,将汇总结果付给该变量,通过该变量的值作为判断条件
这种方法会直接统计数据表中所有的满足条件的记录总数,对于一些数据量庞大的表,在性能上会有非常严重的问题

调用Oracle的EXISTS函数

DECLARE cnt number;BEGINSELECT COUNT(*) INTO cnt FROM DUALWHERE EXISTS (SELECT 1 FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = '130201');IF cnt = 0 THENDBMS_OUTPUT.PUT_LINE('无记录');END IF;
END;

通过在语句的外面套上一层dual,来使用oracle原有的exists语法
虽然和第一种看起来类似,但分析执行计划可以知道,性能比以上两种都要好得多,与MSSQL的 if exists 最接近

将判断条件封装为一个函数

CREATE OR REPLACE FUNCTION EXISTS2 (IN_SQL IN VARCHAR2)RETURN NUMBER
ISV_SQL VARCHAR2(4000);V_CNT NUMBER(1);
BEGINV_SQL := 'SELECT COUNT(*) FROM DUAL WHERE EXISTS (' || IN_SQL || ')';EXECUTE IMMEDIATE V_SQL INTO V_CNT;RETURN(V_CNT);
END;

需要使用的时候直接调用EXISTS2函数即可,例如

BEGINIF EXISTS2 ('SELECT 1 FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = ''130201''') = 1 THENDBMS_OUTPUT.PUT_LINE('存在记录');END IF;
END;

转载:https://www.cnblogs.com/neru/archive/2012/06/23/2559551.html

【Oracle】IF EXISTS用法相关推荐

  1. oracle的exists用法总结

    exists含义 exists表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行.not exists和exists ...

  2. java SQLexists用法,exists用法-EXISTS,用法

    本教程分享:<exists用法>,exists用法:Exists:如果在 Dictionary 对象中指定的记录存在,返回 True,若不存在,返回 False.语法object.Exis ...

  3. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  4. oracle中的exists 和not exists 用法详解

    有两个简单例子,以说明 "exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 ...

  5. oracle中exists和not exists用法(包含经典例题:查看学了所有课程的同学的信息的通俗易懂解释)

    1.基本概念: select * from A where not exists(select * from B where A.id = B.id); select * from A where e ...

  6. 1.oracle中的exists 和not exists 用法:

    1.oracle中的exists 和not exists 用法: exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 ...

  7. MyBatis中exists用法

    MyBatis框架中的exists用法 exists用法 使用示例 总结 exists用法 exists: 如果括号内子查询语句返回结果不为空,说明where条件成立,就会执行主SQL语句 如果括号内 ...

  8. ORACLE NOT EXISTS不等值 改写成hive

    ORACLE NOT EXISTS不等值 改写成hive SELECT A.A1, A.A2,A.A3,A.A4FROM ALEFT JOIN C ON A.A6= C.C6WHERE NOT EXI ...

  9. ORACLE的基础用法

    ORACLE的基础用法 转 自:http://blog.163.com/kelly_19831017/blog/static/6196787020083133348873/ sqlplus sys/o ...

  10. 常见Oracle HINT的用法

    1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...

最新文章

  1. 【Jekyll搭建GITHUB个人博客】安装Ruby 环境、包管理器 RubyGems、Jekyll与错误解决...
  2. Struts2 @ResultPath注释示例
  3. 关于S/4HANA里Sales Office 和Sales Organization那些事儿
  4. 目标检测中召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))
  5. 关于JAVA并发编程你需要知道的——硬件篇
  6. 具有Spring Boot和Java配置的Spring Batch教程
  7. 一个备份sql server文件.bak还原成两个数据库
  8. 移动云亮相 2021 IDC 年度盛典 共话变革与赋能
  9. 定义“移动互联网”的三篇文章
  10. 新浪微博 android2.3,BlackLight新浪微博客户端
  11. html设置回到顶部按钮,给网站添加回到顶部按钮
  12. 凭什么?80后合伙人“叫板Excel”
  13. kali安装火狐浏览器
  14. 微信怎么收银行卡的消息服务器,微信零钱提现,这样操作,可以免去手续费
  15. 类文件解析004-解析常量池元素
  16. vim 去掉黄色阴影
  17. electron (二) 暗黑模式
  18. 雷军带出来的软件,阿里奖励20万,全靠友商衬托,和wps同步普及
  19. 若依专题 线程池配置
  20. 为iPhone日历添加天气和农历

热门文章

  1. 18年6月英语六级第二套听力单词
  2. 人工智能语料库技术是什么?来看科普!
  3. 用git和github来拉近和大牛的距离-郭永峰-专题视频课程
  4. MATLAB高斯高通滤波图像
  5. Java集合类源码分析汇总
  6. python微信商城_python微信商城_GitHub - pythonsir/nideshop: NideShop 开源微信小程序商城服务端(Node.js + ThinkJS)......
  7. android搜狗离线安装包,搜狗翻译离线版下载
  8. 十六种CAD.CAE.CAM软件介绍
  9. RedHat7 安装 MySQL 5.7
  10. 抖音:时间熔炉的诞生