안녕하세요.
제가 오류가 계속 나는데 잡질 못하겠어서 여쭤봅니다.
이번에 동적 쿼리란걸 찾아보면서 이렇게 만들어보았습니다.
테이블이 DAILY_20200101부터 일자별로 DAILY_2020831 까지 저장되어 있는데요,
따라서 조회를 2개의 날짜를 받아서 해당 테이블들을 가져와서,
테이블들을 모두 UNION ALL 하는 형태로 조회가 이루어져야되는 상황입니다.
이 경우, UNION ALL은 어려운 거 같아서 이렇게 쿼리를 짜봤습니다.
한참했는데.. 오류가 도저히 잡히질 않아요..
CREATE OR REPLACE PROCEDURE PROC_SELECT_TBL
(
START_DATE IN NUMBER,
END_DATE IN NUMBER
)
IS
TYPE TBL_LIST IS TABLE OF VARCHAR2(1000) INDEX BY PLS_INTEGER;
TYPE SELECT_ROWS IS TABLE OF DAILY_20200101%ROWTYPE INDEX BY PLS_INTEGER;
V_TBL_LIST TBL_LIST;
V_ROWS SELECT_ROWS;
SQL_STR VARCHAR2(100);
RES_STR VARCHAR2(100);
R_CUR SYS_REFCURSOR;
V_CUR SYS_REFCURSOR;
RES_CUR SYS_REFCURSOR;
BEGIN
SQL_STR := 'SELECT TNAME FROM TAB WHERE SUBSTR(TNAME, 7) BETWEEN :START_DATE AND :END_DATE';
OPEN V_CUR FOR SQL_STR USING START_DATE, END_DATE;
LOOP
FETCH V_CUR BULK COLLECT INTO V_TBL_LIST;
EXIT WHEN V_CUR%NOTFOUND;
END LOOP;
CLOSE V_CUR;
FOR IDX in 1..V_TBL_LIST.LAST
LOOP
RES_STR := 'SELECT * FROM TRIM(V_TBL_LIST(:IDX))';
OPEN RES_CUR FOR RES_STR USING IDX;
LOOP
FETCH RES_CUR BULK COLLECT INTO V_ROWS;
EXIT WHEN RES_CUR%NOTFOUND;
END LOOP;
END LOOP;
END;
/
SET SERVEROUTPUT ON;
EXEC PROC_SELECT_TBL(20200103, 20200105);
이렇게 쓰면
명령의 39 행에서 시작하는 중 오류 발생 -
BEGIN PROC_SELECT_TBL(20200103, 20200105); END;
오류 보고 -
ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다
ORA-06512: "UJWSO.PROC_SELECT_TBL", 29행
ORA-06512: 1행
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
꼭 저 검은줄에서 오류가 나고요, 오류 명이 바뀌지도 않고
SQL을 이렇게 저렇게 바꿔도 똑같이 SQL이 제대로 종료되지 않았다는 오류가 뜹니다.
어떻게 고쳐야 하나요 ㅠㅠ ?
저렇게 테이블 이름 슬라이싱으로 테이블들을 조회하고,
그 테이블들을 한데 묶어서 조회할 수 있어야 합니다..(UNION ALL 처럼)
조언 부탁드립니다.