"PLS-00428: INTO Klausa Hilang dari Penyata Pilihan"
Untuk mendapatkan semula rownum sebagai pembolehubah dan bukannya menggunakan gabungan yang mahal, pernyataan SELECT mesti digunakan, kerana rownum boleh berbeza-beza berdasarkan persekitaran dan tidak boleh diwakili sebagai rentetan statik dalam kod.
Malangnya, percubaan untuk melaksanakan pertanyaan ini dalam Toad dan Oracle SQL Developer menghasilkan ralat berikut:
"PLS-00428: klausa INTO dijangka dalam pernyataan SELECT ini"
Ralat ini berpunca daripada fakta bahawa dalam blok PL/SQL, pembolehubah mesti ditugaskan secara eksplisit kepada lajur dalam penyata pilihan. Ini berbeza daripada pernyataan SQL, di mana nilai lajur boleh dirujuk terus.
Isu dalam kod yang disediakan terletak pada penyataan SQL blok BEGIN kedua, yang tidak mempunyai klausa INTO. Peninggalan ini mencetuskan ralat. Untuk membetulkan ini, kod mesti diubah suai seperti berikut:
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; /
Dengan menambahkan klausa INTO, lajur dalam pernyataan pilih kini diberikan kepada pembolehubah yang sesuai, menyelesaikan ralat.
Rujukan
Atas ialah kandungan terperinci Mengapa saya mendapat ralat 'PLS-00428: klausa INTO hilang daripada pernyataan SELECT ini' dalam kod PL/SQL saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!