首页 > 数据库 > mysql教程 > 为什么我的 PL/SQL 代码中会出现'PLS-00428:此 SELECT 语句中缺少 INTO 子句”错误?

为什么我的 PL/SQL 代码中会出现'PLS-00428:此 SELECT 语句中缺少 INTO 子句”错误?

DDD
发布: 2025-01-01 06:42:10
原创
899 人浏览过

Why am I getting the

“PLS-00428:Select 语句中缺少 INTO 子句”

要检索 rownum 作为变量而不是使用昂贵的联接,必须使用 SELECT 语句,因为 rownum 可能会根据环境而变化,并且不能表示为内部的静态字符串代码。

不幸的是,尝试在 Toad 和 Oracle SQL Developer 中执行此查询会产生以下错误:

“PLS-00428:此 SELECT 语句中需要 INTO 子句”

此错误源于以下事实:在 PL/SQL 块中,必须将变量显式分配给 select 语句中的列。这与可以直接引用列值的 SQL 语句不同。

所提供代码中的问题在于第二个 BEGIN 块的 SQL 语句,该语句缺少 INTO 子句。此遗漏会触发错误。要纠正此问题,必须修改代码如下:

DECLARE
   PROD_ROW_ID   VARCHAR (10) := NULL;
   VIS_ROW_ID    NUMBER;
   DSC           VARCHAR (512);
BEGIN
   SELECT ROW_ID
     INTO VIS_ROW_ID
     FROM SIEBEL.S_PROD_INT
    WHERE PART_NUM = 'S0146404';

   BEGIN
      SELECT    RTRIM (VIS.SERIAL_NUM)
             || ','
             || RTRIM (PLANID.DESC_TEXT)
             || ','
             || CASE
                   WHEN PLANID.HIGH = 'TEST123'
                   THEN
                      CASE
                         WHEN TO_DATE (PROD.START_DATE) + 30 > SYSDATE
                         THEN
                            'Y'
                         ELSE
                            'N'
                      END
                   ELSE
                      'N'
                END
             || ','
             || 'GB'
             || ','
             || RTRIM (TO_CHAR (PROD.START_DATE, 'YYYY-MM-DD'))
        INTO DSC
        FROM SIEBEL.S_LST_OF_VAL PLANID
             INNER JOIN SIEBEL.S_PROD_INT PROD
                ON PROD.PART_NUM = PLANID.VAL
             INNER JOIN SIEBEL.S_ASSET NETFLIX
                ON PROD.PROD_ID = PROD.ROW_ID
             INNER JOIN SIEBEL.S_ASSET VIS
                ON VIS.PROM_INTEG_ID = PROD.PROM_INTEG_ID
             INNER JOIN SIEBEL.S_PROD_INT VISPROD
                ON VIS.PROD_ID = VISPROD.ROW_ID
       WHERE     PLANID.TYPE = 'Test Plan'
             AND PLANID.ACTIVE_FLG = 'Y'
             AND VISPROD.PART_NUM = VIS_ROW_ID
             AND PROD.STATUS_CD = 'Active'
             AND VIS.SERIAL_NUM IS NOT NULL;
   END;
END;
/
登录后复制

通过添加 INTO 子句,select 语句中的列现在被分配给适当的变量,解决了错误。

参考文献

  • [INTO 上的 Oracle 文档子句](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS00601)
  • [有关 SELECT INTO 的 Oracle 文档语句](http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm#CJAJAAIG)
  • [PLS-00428 上的 ORA 代码文档](http:// pls-00428.ora-code.com/)

以上是为什么我的 PL/SQL 代码中会出现'PLS-00428:此 SELECT 语句中缺少 INTO 子句”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板