DECLARE LC_CNT NUMBER(1); BEGIN LC_CNT := 0; SELECT COUNT(*) INTO LC_CNT FROM SY_HAKGWA_DAMDANGJA_BAEJEONG_M WHERE JIGWON_NO= '31998002' ; IF LC_CNT > 0 THEN SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD FROM SY_BUSEO_M A INNER JOIN SY_HAKGWA_DAMDANGJA_BAEJEONG_M B ON A.BUSEO_CD = B.DAMDANG_HAKGWA WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' AND B.JIGWON_NO= '31998002' ORDER BY JOJIK_SORT ; ELSE SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD FROM SY_BUSEO_M A WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' ORDER BY JOJIK_SORT ; END IF; END; ///CNT값이 0보다크면 첫번쨰 쿼리를 타고 그외에는 두번째 쿼리를 타는 쿼리입니다 TOAD에서 돌리니 ORA-06550: 줄 10, 열1:PLS-00428: 이 SELECT문에는 INTO 절이 필요합니다 ORA-06550: 줄 23, 열1:PLS-00428: 이 SELECT문에는 INTO 절이 필요합니다 이런식으로 오류가 발생합니다 무슨문제일까요? 이
DECLARE LC_CNT NUMBER(3); BEGIN LC_CNT := 0; SELECT COUNT(*) INTO LC_CNT FROM SY_HAKGWA_DAMDANGJA_BAEJEONG_M WHERE JIGWON_NO= '31998002' ; IF LC_CNT > 0 THEN SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD INTO LC_CNT FROM SY_BUSEO_M A INNER JOIN SY_HAKGWA_DAMDANGJA_BAEJEONG_M B ON A.BUSEO_CD = B.DAMDANG_HAKGWA WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' AND B.JIGWON_NO= '31998002' ORDER BY JOJIK_SORT ; ELSE SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD INTO LC_CNT FROM SY_BUSEO_M A WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' ORDER BY JOJIK_SORT ; END IF; END;
FROM 절위에 INTO 다선언했는데도 오류가 뜨는데 어떻게 해결해야할지 잘모르겟어요 .
DECLARE LC_CNT NUMBER(3); BEGIN LC_CNT := 0; SELECT COUNT(*) INTO LC_CNT FROM SY_HAKGWA_DAMDANGJA_BAEJEONG_M WHERE JIGWON_NO= '31998002' ; IF LC_CNT > 0 THEN SELECT COUNT(*) INTO LC_CNT FROM SY_BUSEO_M A INNER JOIN SY_HAKGWA_DAMDANGJA_BAEJEONG_M B ON A.BUSEO_CD = B.DAMDANG_HAKGWA WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' AND B.JIGWON_NO= '31998002'; ELSE SELECT COUNT(*) INTO LC_CNT FROM SY_BUSEO_M A WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%'; END IF; END;
-- 쿼리로도 가능은 하겠지만 로우수가 많으면 속도가 좋지 않겠네요.. SELECT CASE WHEN SUM(DECODE(JIGWON_NO, '31998002',1,0)) > 0 THEN SUM(CASE WHEN A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' AND B.JIGWON_NO= '31998002' THEN 1 ELSE 0 END) ELSE SUM(CASE WHEN A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' THEN 1 ELSE 0 END) END AS LC_CNT FROM SY_BUSEO_M A INNER JOIN SY_HAKGWA_DAMDANGJA_BAEJEONG_M B ON A.BUSEO_CD = B.DAMDANG_HAKGWA ;
DECLARE LC_CNT NUMBER(3); BEGIN LC_CNT := 0; SELECT COUNT(*) INTO LC_CNT FROM SY_HAKGWA_DAMDANGJA_BAEJEONG_M WHERE JIGWON_NO= '31998002' ; IF LC_CNT > 0 THEN SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD INTO LC_CNT FROM SY_BUSEO_M A INNER JOIN SY_HAKGWA_DAMDANGJA_BAEJEONG_M B ON A.BUSEO_CD = B.DAMDANG_HAKGWA WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' AND B.JIGWON_NO= '31998002' ORDER BY JOJIK_SORT ; ELSE SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD INTO LC_CNT FROM SY_BUSEO_M A WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' ORDER BY JOJIK_SORT ; END IF; END; 갯수만 들고오는게 아니라 저는 DATA LABEL JOJIK_SORT UP_BUSEO_CD도 같이 들고와야 합니다 .어떻게 방법이 없을까요 ?
DECLARE LC_CNT NUMBER(3); WK_BUSEO_CD VARCHAR2(10); WK_BUSEO_NM VARCHAR2(100); WK_JOJIK_SORT VARCHAR2(10); WK_UP_BUSEO_CD VARCHAR2(10); BEGIN LC_CNT := 0; SELECT COUNT(*) INTO LC_CNT FROM SY_HAKGWA_DAMDANGJA_BAEJEONG_M WHERE JIGWON_NO= '31998002' ; BEGIN IF LC_CNT > 0 THEN SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD INTO WK_BUSEO_CD, WK_BUSEO_NM, WK_JOJIK_SORT, WK_UP_BUSEO_CD FROM SY_BUSEO_M A INNER JOIN SY_HAKGWA_DAMDANGJA_BAEJEONG_M B ON A.BUSEO_CD = B.DAMDANG_HAKGWA WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' AND B.JIGWON_NO= '31998002' ORDER BY JOJIK_SORT ; ELSE SELECT DISTINCT A.BUSEO_CD AS DATA , A.BUSEO_NM AS LABEL , A.JOJIK_SORT , A.UP_BUSEO_CD INTO WK_BUSEO_CD, WK_BUSEO_NM, WK_JOJIK_SORT, WK_UP_BUSEO_CD FROM SY_BUSEO_M A WHERE A.BUSEO_LVL = '5' AND A.BUSEO_CD LIKE 'KH%' ORDER BY JOJIK_SORT ; END IF; EXCEPTION WHEN OTHERS THEN WK_BUSEO_CD := NULL; WK_BUSEO_NM := NULL; WK_JOJIK_SORT := NULL; WK_UP_BUSEO_CD := NULL; DBMS_OUTPUT.PUT_LINE('값을 찾을 수 없습니다 : '||SQLERRM); END; END;
SELECT 절에 오는 컬럼마다 변수가 지정되어야하구요.
또, SELECT되는 ROW의 수는 항상 1 ROW여야 해요. 담을 수 있는 변수가 VARCHAR형이니까요.
해서 EXCEPTION 절을 썼어요. ORDER BY를 쓰신 거 보니 멀티 ROW가 셀렉트 되는 쿼리일 거
같은데 만약 멀티 ROW가 셀렉트되어야 한다면 커서를 사용하세요.
커서는 찾아서 조금 보시면 아실 겁니다.
SELECT COUNT(*) INTO LC_CNT FROM SY_HAKGWA_DAMDANGJA_BAEJEONG_M WHERE JIGWON_NO= '31998002' ; 위의 쿼리도 약간이라도 튜닝하는편이 좋겠네요... 위에 쿼리 실행결과가 단1로우라도 있거나, 0로우거나로 분기되는건데 count(*)로 모든 로우의 갯수를 세는 것은 의미가 없겠지요. select 1 into LC_CNT from dual where exist (select 1 from SY_HAKGWA_DAMDANGJA_BAEJEONG_M where JIGWON_NO= '31998002') ;