INTO절이나 IN절에 TABLE타입 선언..불가? 0 4 1,605

by 조현정 [2017.01.05 14:07:52]


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 테이블타입변수

 

 

 

 

by 손님 [2017.01.05 22:37:44]
다이나믹 쿼리

by 조현정 [2017.01.06 08:26:31]

다이나믹 쿼리는 디버깅할 때마다 ' 빼줘야 하고.. 암튼 불편해서요.


by 우리집아찌 [2017.01.06 09:19:29]

dbms_output 쓰셔서 '쿼리' 만 출력해서 돌려보면 되죠..

 


by jkson [2017.01.06 08:50:42]

테스트한 거 올려봅니다 참고해보세요.

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 해야하는 것 같습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입