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

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]

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

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

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