Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens l'erreur « PLS-00428 : une clause INTO est manquante dans cette instruction SELECT » dans mon code PL/SQL ?

Pourquoi est-ce que j'obtiens l'erreur « PLS-00428 : une clause INTO est manquante dans cette instruction SELECT » dans mon code PL/SQL ?

DDD
DDDoriginal
2025-01-01 06:42:10900parcourir

Why am I getting the

"PLS-00428 : Clause INTO manquante dans l'instruction Select"

Pour récupérer un numéro de ligne en tant que variable plutôt que d'utiliser une jointure coûteuse, une instruction SELECT doit être utilisée, car le numéro de ligne peut varier en fonction de l'environnement et ne peut pas être représenté comme une chaîne statique dans le code.

Malheureusement, tenter d'exécuter cette requête dans Toad et Oracle SQL Developer génère l'erreur suivante :

"PLS-00428 : une clause INTO est attendue dans cette instruction SELECT"

Cette erreur vient du fait que dans les blocs PL/SQL, les variables doivent être explicitement affectées aux colonnes dans les instructions select. Cela diffère des instructions SQL, où les valeurs de colonne peuvent être directement référencées.

Le problème dans le code fourni réside dans l'instruction SQL du deuxième bloc BEGIN, qui ne contient pas de clause INTO. Cette omission déclenche l'erreur. Pour remédier à cela, le code doit être modifié comme suit :

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;
/

En ajoutant la clause INTO, les colonnes de l'instruction select sont désormais affectées aux variables appropriées, résolvant l'erreur.

Références

  • [Documentation Oracle sur INTO clause](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS00601)
  • [Documentation Oracle sur SELECT INTO déclaration](http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm#CJAJAAIG)
  • [Documentation ORA-Code sur PLS-00428](http:// pls-00428.ora-code.com/)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn