【问题标题】:an INTO clause is expected in this SELECT statement when working with PLSQL使用 PLSQL 时,此 SELECT 语句中需要一个 INTO 子句
【发布时间】:2016-06-01 11:24:53
【问题描述】:

我收到以下错误。在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;

【问题讨论】:

  • 你在用这个游标循环做什么?看起来它可以在单个 sql 语句中轻松实现。另外,您知道fname 变量只是被每个循环覆盖,但没有其他作用?请更新您的问题以将光标包含在 cur_names 后面。

标签: plsql


【解决方案1】:

您不能在您的 pl sql 代码中进行随机选择。它必须在带有 into 子句的循环游标中。只需在此处包含一个 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;
    

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多