如何在Oracle中创建IF NOT EXISTS查询?

jra*_*ara 1 sql oracle

我正在尝试在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)

为什么,这个查询出了什么问题?

hku*_*uay 5

使用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)