* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Ubuntu Linux 64bit | |
CUBRID-10.2.0.8797-d56a158-Linux.x86_64 | |
[도움말]-[버전정보] 확인 | |
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
안녕하세요
현재 오라클에서 큐브리드로 마이그레이션을 하고
게시판 페이징을 구현하려고 하는데
MAX(ROWNUM) OVER ( ORDER BY ROWNUM DESC ) AS countAll <--전체 데이터 카운터수
이렇게 쓰면 에러는 안나는데 countAll 이 null값으로 나옵니다.
오라클에선 잘 나오는데....
다른쿼리를 써야 할까요?
아니면 count 쿼리를 한번 더 날려서 구현을 해야 하나요?
아래는 쿼리문입니다.
SELECT
F.BOARDID
, F.TITLE
, F.BOARD_REF
, F.RE_STEP
, F.RE_LEVEL
, F.READNUM
, F.ATCHMNFL_NO
, F.NOTICEFLAG
, F.STARTDATE
, F.ENDDATE
, F.REGDATE
, F.MGS_USERID
, F.countAll
FROM
(
SELECT
E.BOARDID
, E.TITLE
, E.BOARD_REF
, E.RE_STEP
, E.RE_LEVEL
, E.READNUM
, E.ATCHMNFL_NO
, E.NOTICEFLAG
, E.STARTDATE
, E.ENDDATE
, TO_CHAR(E.REGDATE,'YYYY-MM-DD HH:MI:SS') AS REGDATE
, E.MGS_USERID
, ROW_NUMBER() OVER (ORDER BY E.NOTICEFLAG DESC,E.BOARDID DESC) AS RNUM
, MAX(ROWNUM) OVER ( ORDER BY ROWNUM DESC ) AS countAll <-- 이부분입니다.
FROM
(
SELECT A.BOARDID
, A.TITLE
, A.BOARD_REF
, A.RE_STEP
, A.RE_LEVEL
, A.READNUM
, A.ATCHMNFL_NO
, A.NOTICEFLAG
, A.STARTDATE
, A.ENDDATE
, A.REGDATE
, A.MGS_USERID
FROM BOARD_NOTICE A
WHERE A.NOTICEFLAG = 'Y'
AND (TO_CHAR(SYSDATETIME,'YYYYMMDD') BETWEEN A.STARTDATE AND A.ENDDATE)
UNION ALL
) E
WHERE 1 = 1
)F
ORDER BY F.NOTICEFLAG DESC,F.BOARDID DESC
FOR ORDERBY_NUM() BETWEEN 1 + 1 AND 10
답변좀 부탁드립니다.
아래와 같이 /*+ recompile */ 힌트를 추가하여 우회 할 수 있습니다.
SELECT /*+ recompile */
F.BOARDID
, F.TITLE
, F.BOARD_REF
, F.RE_STEP
, F.RE_LEVEL
, F.READNUM
, F.ATCHMNFL_NO
, F.NOTICEFLAG
, F.STARTDATE
, F.ENDDATE
, F.REGDATE
, F.MGS_USERID
, F.countAll
FROM
(
.....
해당 내용은 연구소에서 검토 중입니다.
CUBRID를 이용해 주셔서 감사합니다.