두 개의 날짜를 받아서 여러 테이블을 UNION ALL 하는 PL/SQL 0 2 659

by VANT [PL/SQL] [2020.09.02 06:17:34]


안녕하세요..

이번에 새로 가입하게 된 초짜 취준생입니다..

 

다름이 아니라, 

제가 이런 테이블들을 가지고 있습니다.

D_20200101, D_20200102 .... D_20200831

이렇게 수많은 테이블들이 있는데, 웹에서 만약 날짜 2개를 받아와서 그 숫자 사이만큼 테이블들을 UNION ALL하는

프로시저를 만들고 싶습니다. 즉 그 날짜 사이들의 테이블들을 UNION ALL 하고 싶다는 얘기입니다!

이게 한 두개면 상관 없는데, 수십개가 되면 감당이 안되가지고 프로시저로 만들려고 하는데요!

 

그런데 도무지... 떠오르지가 않네요.

DB를 깊게 배우진 않아서 더 그런 것 같습니다.

CREATE OR REPLACE PROCEDURE PROC_UNION_TBL
(
  START_DATE IN VARCHAR2,
  END_DATE IN VARCHAR2
)
IS
    START_DATE   VARCHAR2 := 20200101;
    END_DATE     VARCHAR2 := 20200102;
    CNT           NUMBER  := (TO_DATE(END_DATE) - TO_DATE(START_DATE));
    SQL_QUERY    VARCHAR2(MAX);
    
BEGIN
    FOR i IN 1..CNT
    LOOP
        SQL_QUERY := 'SELECT * FROM DAILY_'||START_DATE||' UNION ALL ';
        START_DATE := START_DATE + 1;
    END LOOP;
END PROC_UNION_TBL;
/

 

이런 식으로 모양만 따라했는데 저런 String을 만들어서 어떻게 또 실행할까 고민도 되고,

저게 좀 많이 틀려있는 것도 압니다.

 

염치 없지만 제가 프로젝트 시간이 별로 없어서, 여기있는 분들께 많은 팁좀 얻고 싶습니다.

(제가 지식이 많지 않아서 막 요렇게 저렇게 설명만 해주시면 잘 못알아들을 수 있어요...

 그냥 비슷한 코드만 던져 주셔도 큰 도움이 됩니다. 제가 공부해서 응용해보겠습니다...)

 

데이터베이스는 오라클 12c 입니다.

by 마농 [2020.09.02 07:42:38]

굳이 PL/SQL 로 하실 필요가 없습니다.
모든 테이블을 UNION ALL 한 형태의 뷰를 미리 만들어 두고, 뷰를 조회하시면 됩니다.
일자에 인덱스가 있고, 일자 조건이 들어간다면? 성능에도 문제가 없습니다.


by VANT [2020.09.02 09:26:59]

그런 방법이 있군요! 감사합니다!!

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