회사에서 맡은 일을 하던중 막혀서 질문드립니다.. 0 9 893

by zumsim [SQL Query] [2018.09.24 17:20:04]


현재 제가 처한(?) 상황은 이렇습니다

제가 접근 가능한 DB(일반공지)와 개발서버에서만 접근이 가능한 DB(프로그램, 뉴스)가 있는데

제가 막힌 부분이 전체를 클릭했을 때 다 가져와서 보여줘야 하는데 ...

테이블을 어떤식으로 합쳐야 할지를 모르겠어서 막막합니다.

각각의 데이터를 긁어오는 쿼리를 보여드리면 혹시 설명가능할지 몰라서 올려봅니다..

 

1) 프로그램, 뉴스 데이터 긁어오는 쿼리

SELECT 
    A.rnum,
    A.BOARD_NUM,
    replace(replace(replace(board_title, '<b><font color=RED>', ''), '<b><font color=blue>', ''), '<b><font color=red>', '') BOARD_TITLE,
    A.CREATETIME,
    A.CREATER,
    A.BOARD_TYPE,
    A.VIEW_CNT,
    A.FILE_URL1,
    A.FILE_URL2,
    A.FILE_URL3,
    A.FILE_FLAG,
    A.NOTICE_FLAG
FROM (
  SELECT rownum as rnum, A.* FROM (
      SELECT 
           BOARD_NUM,
           BOARD_TITLE,
           TO_CHAR(TO_DATE(CREATETIME, 'YYYY-MM-DD hh24:mi:ss'), 'YYYY-MM-DD') CREATETIME,
           CREATER,
           BOARD_TYPE,
           VIEW_CNT,
           FILE_URL1,
           FILE_URL2,
           FILE_URL3,
           DECODE(FILE_URL1, NULL, 'N', 'Y') FILE_FLAG,
           NVL(NOTICE_FLAG, 'N') NOTICE_FLAG
      FROM hsdb.V_HGU_NOTICE
      WHERE BOARD_TYPE IN('프로그램','뉴스')
     ]]><dynamic><![CDATA[ ${ WHERE_SEARCH } ]]></dynamic><![CDATA[
     ORDER BY NOTICE_FLAG DESC, BOARD_NUM DESC
   ) A
 WHERE rownum <= ?
) A
WHERE A.rnum >= ?

 

2) 일반공지 긁어오는 쿼리

 

SELECT 
    @rownum := @rownum + 1 as ROWNUM,
    BOARD_CODE,
    BOARD_NUM,
    BOARD_TITLE,
    BOARD_CONTENT,
    RFRN_URL,
    FILE_FLAG,
    VIEW_CNT,
    DATE_FORMAT(CREATETIME, '%Y-%m-%d') CREATETIME,
    A.CREATER CREATER_ID,
    (SELECT NAME FROM TB_BA_USER WHERE USERID = A.CREATER) CREATER,
    IFNULL(NOTICE_FLAG, 'N') NOTICE_FLAG,
    OPEN_FLAG,
    UPEST_BRD_NUM,
    UP_BRD_NUM,
    BRD_DEPTH,
    DIV_CD,
    FUN_COMMON_CODE('BD01', DIV_CD) DIV_STR,
    DEL_YN
FROM TB_BRD_BOARD A, (select @rownum :=0) r
WHERE BOARD_CODE = ?
    ]]><dynamic><![CDATA[ ${ WHERE_SEARCH } ]]></dynamic><![CDATA[
ORDER BY IFNULL(NOTICE_FLAG, 'N') DESC, UPEST_BRD_NUM DESC, CREATETIME, BRD_DEPTH ASC
LIMIT ?, 10

 

되게 난잡한 거 같긴한데.. 혹시나 도움 주실 수 있으면 힌트좀 주십시오.ㅠㅠ

구글링 해보니 테이블 합칠땐 join이나 union 사용한다는데 sql쪽에 약해서.. 공부하겠습니다.ㅠ

by 야신 [2018.09.25 13:29:46]

일반공지는 mysql 것 같고 프로그램, 뉴스는 오라클로 보이는데 두개의 db connection 은 각각 아닌가요?

오라클에 mysql 로 odbc 를 이용한dblink 를 만든다 해도 기본기능을 제외한 고유기능들을 사용하기 어려울것 같네요


by zumsim [2018.09.26 21:34:38]

제가 쿼리만 짜두고 개발서버 올려서 확인하는 식으로 하는데 

그래도 좀 어려울까요?

회사에서 신입인 저한테 맡긴건 불가능하진않아서 맡긴거 같긴한데.. 쿼리쪽이 좀 약해서요ㅠㅠ


by zumsim [2018.09.25 15:10:44]

아 그런가요ㅠ.. 


by 마농 [2018.09.27 09:19:43]

이기종 DB 이므로 그냥은 안됩니다.
1. 한쪽 DB 에서 다른쪽 DB 를 DB링크 걸어서 쿼리로 UNION ALL 하여 사용하는 방법.
2. 프로그램에서 각각 가져와 결과set을 합치고 다시 정렬하여 페이징 처리하는 방법.


by zumsim [2018.09.27 12:07:58]

2번 방법으로 하고 싶은데 조금만 알려주실수있나요?


by 마농 [2018.09.27 13:12:41]

2번은 DB 나 SQL 분야가 아니고 프로그램 분야입니다.
프로그램 언어에 따라 구현 방법이 다를 것입니다.


by zumsim [2018.09.27 14:07:46]

흐어...

따로따로 긁어서 보여주는건 쉽게해서 금방할 줄 알았는데

생각보다 까다롭네요..

 


by 우리집아찌 [2018.09.28 08:32:27]

dblink 아니면 batch로 가져와야죠..


by 야신 [2018.10.01 08:17:47]

일반공지가 프로그램,뉴스 보다 양이훨씬 적을거 같으니 mysql 과 오라클과의 db 링크를 만들고 mysql 에서는 트리거를 만들어 오라클쪽으로 보니주는 방식이 좋을거 같네요

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