「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中文網其他相關文章!