错误 PLS-00428:此 SELECT 语句中应有一个 INTO 子句

Posted

技术标签:

【中文标题】错误 PLS-00428:此 SELECT 语句中应有一个 INTO 子句【英文标题】:Error PLS-00428: an INTO clause is expected in this SELECT statement 【发布时间】:2021-03-01 18:38:37 【问题描述】:

我只想在声明过程之间显示 USU_USERS 表,但是当我尝试编译时显示此错误

 DECLARE

 ID_UNICO VARCHAR(200) := 'H3LP';

 BEGIN
    
   DECLARE
          VID VARCHAR2(200);
          VID_USER VARCHAR2(200);
   BEGIN
          VID := ID_UNICO;
          VID_USER := 'SOPORTE';
 
          USR_SP_USERS.CREATE(
            VID => VID,
            VID_USER => VID_USER,
          );
   END;
        
    SELECT * from USU_USERS;

 END;

注意:此表不止一行。

【问题讨论】:

根据 PL/SQL 的工作方式,没有地方可以输出。如果您想在控制台上输出并且您将其作为“脚本”执行,则删除 BEGINEND; 对不起,我更新了帖子。我需要在输出中显示 DECLARE 过程中的表 如果您必须使用 PL/SQL 将输出打印到控制台,请查看 this 及其答案。也可以看this。 这三个查询保证产生 (C) 0 或更多行 “这是一个例子”——不幸的是,这是一个非常糟糕的例子。您的示例应该表明需要在 PL/SQL 中执行“某些操作”,例如复杂的处理等。无论如何,几乎可以肯定您需要在 PL/SQL 块之外执行一条 SQL 语句(因此, ,该块不会是匿名的)。最常见的方法是创建一个表函数(一个返回某种表的函数);然后,在标准 SQL 语句中,您选择“从那个函数”(实际上,从它的表输出中)。你的问题,正如所问的那样,毫无意义。 【参考方案1】:

PL/SQL 只是一种服务器端语言,因此无法在任何地方“显示”SELECT 语句的结果。您的 SELECT 语句需要将从数据库中检索到的值放入一个或多个变量中。让我们尝试为您提供一些可行的方法:

DECLARE
  strID_UNICO   VARCHAR(200) := 'H3LP';
  strVID        VARCHAR2(200);
  strVID_USER   VARCHAR2(200);

  rowUSU_USERS  USU_USERS%ROWTYPE;
BEGIN
  strVID := strID_UNICO;
  strVID_USER := 'SOPORTE';

  USR_SP_USERS.CREATE(VID      => strVID,
                      VID_USER => strVID_USER);
        
  SELECT *
    INTO rowUSU_USERS
    FROM USU_USERS;
END;

请注意,如果表 USU_USERS 中包含多于一行,则此代码将失败。但是,假设 USU_USERS 中只有一行,那么您可以使用DBMS_OUTPUT.PUT_LINE 输出rowUSU_USERS 中的各个字段。

【讨论】:

以上是关于错误 PLS-00428:此 SELECT 语句中应有一个 INTO 子句的主要内容,如果未能解决你的问题,请参考以下文章

简单选择给了我:PLS-00428:需要一个 INTO 子句[重复]

在 SELECT 语句中使用声明的变量

在 for 循环中选择语句

oracle regexp_like 与 select 模式

声明变量的 PL/SQL 编译错误

在 PL-SQL 中声明和使用变量