【Oracle】IFEXISTS⽤法
在Oracle中没有SQL中的if exists(...)的⽤法,所以可以⽤以下⼏种⽅法来替代
判断符合条件的个数是否为0
DECLARE cnt number;
BEGIN
SELECT COUNT(*)INTO cnt FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID ='130201';
IF cnt =0THEN
DBMS_OUTPUT.PUT_LINE('⽆记录');
END IF;
END;
先定义⼀个变量,将所要查询的条件写成⼀个SELECT语句,将汇总结果付给该变量,通过该变量的值
作为判断条件这种⽅法会直接统计数据表中所有的满⾜条件的记录总数,对于⼀些数据量庞⼤的表,在性能上会有⾮常严重的问题
调⽤Oracle的EXISTS函数
DECLARE cnt number;
BEGIN
SELECT COUNT(*)INTO cnt FROM DUAL
WHERE EXISTS(
SELECT1FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID ='130201'
);
IF cnt =0THEN
exists的用法DBMS_OUTPUT.PUT_LINE('⽆记录');
END IF;
END;
通过在语句的外⾯套上⼀层dual,来使⽤oracle原有的exists语法
虽然和第⼀种看起来类似,但分析执⾏计划可以知道,性能⽐以上两种都要好得多,与MSSQL的 if exists 最接近
将判断条件封装为⼀个函数
CREATE OR REPLACE FUNCTION EXISTS2 (IN_SQL IN VARCHAR2)
RETURN NUMBER
IS
V_SQL VARCHAR2(4000);
V_CNT NUMBER(1);
BEGIN
V_SQL :='SELECT COUNT(*) FROM DUAL WHERE EXISTS ('|| IN_SQL ||')';
EXECUTE IMMEDIATE V_SQL INTO V_CNT;
RETURN(V_CNT);
END;
需要使⽤的时候直接调⽤EXISTS2函数即可,例如
BEGIN
IF EXISTS2 ('SELECT 1 FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = ''130201''')=1THEN
DBMS_OUTPUT.PUT_LINE('存在记录');
END IF;
END;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论