Rumah > pangkalan data > tutorial mysql > Mengapa saya mendapat ralat 'PLS-00428: klausa INTO hilang daripada pernyataan SELECT ini' dalam kod PL/SQL saya?

Mengapa saya mendapat ralat 'PLS-00428: klausa INTO hilang daripada pernyataan SELECT ini' dalam kod PL/SQL saya?

DDD
Lepaskan: 2025-01-01 06:42:10
asal
908 orang telah melayarinya

Why am I getting the

"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;
/
Salin selepas log masuk

Dengan menambahkan klausa INTO, lajur dalam pernyataan pilih kini diberikan kepada pembolehubah yang sesuai, menyelesaikan ralat.

Rujukan

  • [Dokumentasi Oracle tentang INTO klausa](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS00601)
  • [Dokumentasi Oracle pada SELECT INTO pernyataan](http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm#CJAJAAIG)
  • [Dokumentasi Kod ORA pada PLS-00428](http:// pls-00428.ora-code.com/)

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan