복붙노트

[SQL] PLS-00428 : INTO 절은이 SELECT 문에 기대된다

SQL

PLS-00428 : INTO 절은이 SELECT 문에 기대된다

나는 변수로 오히려 사용이 비싼 가입보다 ROWNUM을 저장하고자하고있다. 나는 그것이 코드에서 리터럴 문자열이 될 수 있도록 ROWNUM은 다양한 환경에 따라 달라질 수 것 같은 Select 문에서이를 얻을 필요가있다.

상황의 경우,이 쿼리는 오라클 시벨 CRM 스키마에서 실행하고 특정 유형 및 특성의 일부 제품을 검색합니다.

나는 그러나 나는 다음과 같은 오류가 발생하고, 두꺼비와 Oracle SQL Developer에서 다음 SQL 코드를 사용하여 시도 :

여기에 코드입니다

    DECLARE
    PROD_ROW_ID varchar(10) := NULL;
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'))
        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;
/

해결법

  1. ==============================

    1.PLSQL 블록에서 선택 문 열은 SQL 문에서의 경우와하지 않은 변수에 할당해야합니다.

    PLSQL 블록에서 선택 문 열은 SQL 문에서의 경우와하지 않은 변수에 할당해야합니다.

    에 두 번째로의 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;
    /
    

    참조

    http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS00601 http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm#CJAJAAIG http://pls-00428.ora-code.com/

  2. from https://stackoverflow.com/questions/25486543/pls-00428-an-into-clause-is-expected-in-this-select-statement by cc-by-sa and MIT license