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 테이블타입변수
테스트한 거 올려봅니다 참고해보세요.
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 해야하는 것 같습니다.