반응형
PLS-00428: 이 SELECT 문에 INTO 절이 필요합니다.
비싼 Join을 사용하지 않고 Rownum을 변수로 저장하고 싶습니다.Rownum은 환경에 따라 다르기 때문에 코드 내의 리터럴 문자열이 될 수 없기 때문에 Select 문에서 가져와야 합니다.
컨텍스트의 경우 이 쿼리는 Oracle Siebel CRM 스키마에서 실행되며 특정 유형 및 속성의 일부 제품을 검색합니다.
Toad 및 Oracle SQL Developer에서 다음 SQL 코드를 사용하려고 했지만 다음 오류가 나타납니다.
PLS-00428: 이 SELECT 문에 INTO 절이 필요합니다.
여기 코드가 있습니다.
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;
/
PLSQL 블록에서는 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;
/
레퍼런스
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/
언급URL : https://stackoverflow.com/questions/25486543/pls-00428-an-into-clause-is-expected-in-this-select-statement
반응형
'programing' 카테고리의 다른 글
HttpPost에서 매개 변수를 사용하는 방법 (0) | 2023.03.18 |
---|---|
지도 반환 시 어떻게 사용합니까? (0) | 2023.03.18 |
ASP를 실행합니다.NET의 Blog Engine.Net Stack Up Wordpress? (0) | 2023.03.18 |
Angular.js ng-복수의 요소에 걸쳐 반복 (0) | 2023.03.18 |
치명적인 오류 해결 방법: 아바다 테마에서 활성 클래스 범위가 없을 때 "self"를 사용할 수 없습니다. (0) | 2023.03.18 |