我正在尝试在Oralce中创建一个IF NOT EXISTS查询,如下所示:
DECLARE
cnt NUMBER;
BEGIN
SELECT COUNT(*) INTO cnt FROM MY.MYTABLE
WHERE MYFIELD = 400;
IF (cnt = 0)
THEN
SELECT 'NO ROWS' AS FAIL FROM DUAL;
ELSE
SELECT 'SOME ROWS' AS PASS FROM DUAL;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
但这失败了
ORA-06550: line 9, column 7:
PLS-00428: an INTO clause is expected in this SELECT statement
ORA-06550: line 11, column 7:
PLS-00428: an INTO clause is expected in this SELECT statement
Run Code Online (Sandbox Code Playgroud)
为什么,这个查询出了什么问题?
使用to为变量赋值.
DECLARE
cnt NUMBER;
res NVARCHAR2(50);
BEGIN
SELECT COUNT(*) INTO cnt FROM MY.MYTABLE
WHERE MYFIELD = 400;
IF (cnt = 0)
THEN
SELECT 'NO ROWS' INTO RES FROM DUAL;
ELSE
SELECT 'SOME ROWS' INTO RES FROM DUAL;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
您也可以直接为变量赋值
IF (cnt = 0)
THEN
res := 'NO ROWS';
ELSE
res := 'SOME ROWS';
END IF;
Run Code Online (Sandbox Code Playgroud)
最好的方法就是使用这个sql
SELECT DECODE(COUNT(*), 0, 'NO ROWS','SOME ROWS') FROM MY.MYTABLE
WHERE MYFIELD = 400;
Run Code Online (Sandbox Code Playgroud)