使用PLSQL时,此SELECT语句需要一个INTO子句。

5

我收到了以下错误信息,在 SELECT CASE 语句中出现了该错误。

PLS-00428:此 SELECT 语句中需要一个 INTO 子句。

FOR REMS IN cur_names LOOP

SELECT CASE   
        WHEN EXISTS (SELECT 1 
                     FROM SupplyTable 
                     WHERE FirstName = REMS.Names) 
        THEN 'Y' 
        ELSE 'N' 
    END AS rec_exists
FROM dual;

  IF rec_exists = 'Y' THEN
    FName := REMS.Names;
  ELSE
    FName := 'Gen';
  END IF;
END LOOP;

1
你在使用这个游标循环做什么?看起来可以轻松地通过单个SQL语句实现。此外,你知道fname变量只是在每次循环中被覆盖,但没有其他作用吗?请更新你的问题,包括cur_names后面的游标。 - Boneist
2个回答

6

您不能在PL/SQL代码中使用随机选择。它必须在循环、游标或带有INTO子句的SELECT语句中使用。请在此处添加INTO子句。

declare 
   v_value varchar2(1);
begin
...
FOR REMS IN cur_names LOOP

   SELECT CASE   
           WHEN EXISTS (SELECT 1 
                        FROM SupplyTable 
                        WHERE FirstName = REMS.Names) 
           THEN 'Y' 
           ELSE 'N' 
       END AS rec_exists
   INTO v_value 
   FROM dual;
   IF v_value = 'Y' THEN
      FName := REMS.Names;
   ELSE
      FName := 'Gen';
   END IF;
END LOOP;
...

或者一个循环

FOR REMS IN cur_names LOOP

   for i in 
   (   
       SELECT CASE   
           WHEN EXISTS (SELECT 1 
                        FROM SupplyTable 
                        WHERE FirstName = REMS.Names) 
           THEN 'Y' 
           ELSE 'N' 
       END AS rec_exists
       FROM dual
   )
   loop
      IF i.rec_exists = 'Y' THEN
         FName := REMS.Names;
      ELSE
         FName := 'Gen';
     END IF;
   end loop;
END LOOP;

2

您需要将输出存储在某个地方,比如一个变量中。 REC_EXISTS 是一列,因此在选择之后它就不再存在。

尝试这样做:

declare rec_exists varchar2(1);;
FOR REMS IN cur_names LOOP
SELECT CASE   
        WHEN EXISTS (SELECT 1 
                     FROM SupplyTable 
                     WHERE FirstName = REMS.Names) 
        THEN 'Y' 
        ELSE 'N' 
    END into rec_exists
FROM dual;
  IF rec_exists = 'Y' THEN
    FName := REMS.Names;
  ELSE
    FName := 'Gen';
  END IF;
END LOOP;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接