TYPE A IS TABLE OF...로 선언하는 TABLE 타입의 변수에 대한 2가지 질문이 있습니다.
첫째는. INTO절에 TABLE 타입의 변수를 쓸 수 없는지 (꼭 FETCH문을 돌려서 일일이 넣어야 하나요?)
둘째는. IN 절에 TABLE 타입의 변수를 쓸수 없는지
IN절에 고정된 서브쿼리가 너무 중복으로 여기 저기 많이 들어있어서 TABLE변수에 담아두고 싶거든요.
X IN (SELECT Y FROM TAB1 WHERE A = 'aa')
X IN 테이블타입변수
테스트한 거 올려봅니다 참고해보세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | CREATE TABLE TMP_20160106_TEST (ID VARCHAR2(10) ); INSERT INTO TMP_20160106_TEST VALUES ( '0245834' ); INSERT INTO TMP_20160106_TEST VALUES ( '0320058' ); INSERT INTO TMP_20160106_TEST VALUES ( '0320058' ); INSERT INTO TMP_20160106_TEST VALUES ( '1355082' ); COMMIT ; CREATE type tmp is table of VARCHAR2(10); DECLARE TMPINS TMP := NEW TMP(); V_CNT NUMBER; BEGIN SELECT ID BULK COLLECT INTO TMPINS FROM ( SELECT '0245834' ID FROM DUAL UNION ALL SELECT '0320058' FROM DUAL); SELECT COUNT (1) INTO V_CNT FROM TMP_20160106_TEST WHERE ID IN ( SELECT COLUMN_VALUE FROM TABLE (TMPINS)); DBMS_OUTPUT.PUT_LINE(V_CNT); END ; |
PL/SQL DECLARE 절에서 선언한 TYPE은
SELECT COLUMN_VALUE
FROM TABLE(TMPINS)
형태로 사용이 불가하네요.
TYPE을 따로 CREATE 해야하는 것 같습니다.