“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 语句中的列现在被分配给适当的变量,解决了错误。
参考文献
以上是为什么我的 PL/SQL 代码中会出现'PLS-00428:此 SELECT 语句中缺少 INTO 子句”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!