【发布时间】:2021-09-28 11:22:31
【问题描述】:
我试图检查这两个表中的值,并且我只想在 TableA 中找到该值时才继续进行下一个查询。下面的逻辑有问题,当没有数据时,它会进入异常而不是将NULL存储到变量中。
SET SERVEROUTPUT ON;
SET FEEDBACK OFF;
SPOOL temp.txt;
DECLARE
v_ATM TableA.CODE%TYPE := NULL;
v_TBL TableB.CODE%TYPE := NULL;
BEGIN
SELECT TableA.CODE, TableB.CODE INTO v_ATM,v_TBL FROM TableA LEFT JOIN TableB ON TableA.CODE = TableB.CODE WHERE TableA.CODE = 'ABC';
IF (v_ATM IS NULL) AND (v_TBL IS NULL) THEN
DBMS_OUTPUT.PUT_LINE('No value found');
ELSIF (v_ATM IS NOT NULL) AND (v_TBL IS NOT NULL) THEN
DBMS_OUTPUT.PUT_LINE('Found in both');
ELSIF (v_ATM IS NULL) AND (v_TBL IS NOT NULL) THEN
DBMS_OUTPUT.PUT_LINE('Found in Table B');
ELSIF (v_ATM IS NOT NULL) AND (v_TBL IS NULL) THEN
DBMS_OUTPUT.PUT_LINE('Found in Table A');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Exception');
END;
或者我正在尝试:
SELECT TableA.CODE INTO v_ATM FROM TableA WHERE TableA.CODE = 'ABC';
SELECT TableB.CODE INTO v_TBL FROM TableB WHERE TableB.CODE = 'ABC';
但是,如果没有找到 ABC,v_ATM 不会存储 NULL,并进入异常。
【问题讨论】:
-
在询问 SQL 问题时,几乎总是需要为您正在使用的特定 DBMS 添加标签,因为它们之间的功能和语法差异很大。请edit您的帖子添加该标签。
-
缺席行既没有
null也没有null值。它不存在。处理no_data_found异常并继续。