database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40653 게시물 읽기
No. 40653
SYSDATE FUNCTION 과 SQL 결과값이 다른데 확인 부탁드립니다.
작성자
박재덕(jdpark)
작성일
2014-12-18 12:29
조회수
6,435

1) 과 2)의 결과 값이 다릅니다.

원인 분석 부탁 드립니다.

1)

CREATE or REPLACE FUNCTION  FUNC_UPDATE_CONFIRM
          ( sorderdate IN DATE ) RETURN VARCHAR2
    IS
      R_RESULT VARCHAR2(20);
BEGIN
          SELECT CCDATE INTO  R_RESULT
          FROM
            ( SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') CCDATE
              FROM    DUAL
              WHERE (   TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd')
                     OR TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd') + 1 )
              -- UNION.... 추가 예정...
            ) ;
      RETURN  R_RESULT ;
 EXCEPTION
    WHEN NO_DATA_FOUND THEN
      R_RESULT := 'NOT' ;
      RETURN  R_RESULT ;
   WHEN OTHERS THEN
      R_RESULT := 'OTHER' ;
      RETURN  R_RESULT;
END ;

 ************
 2)
           SELECT CCDATE
           FROM
            ( 
              SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') CCDATE
              FROM    DUAL
              WHERE (   TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd')
                     OR TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd') + 1 ) )
                    

이 글에 대한 댓글이 총 3건 있습니다.

소스내용은 동일합니다.

실행결과를 올려야 추정이 가능할까 합니다.

최성준(junkk)님이 2014-12-19 14:14에 작성한 댓글입니다.

1) 은 NOT 으로 출력 되고

2) 는 2014-12-19  ... 정상적으로 나옵니다.

오라클 펑션으로도 2)의 결과를 얻고 싶은데  답이 안 나오네요.

고수님들의 조언 부탁드립니다.

박재덕(jdpark)님이 2014-12-19 14:47에 작성한 댓글입니다.

평션에

NO_DATA_FOUND 는 한건도 없다는 것이니

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') CCDATE
              FROM    DUAL
              WHERE (   TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd')
                     OR TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd') + 1 )
 

이부분을 WHERE 조건 빼서

SELECT TRUNC(SYSDATE) ||' : ' || TO_CHAR(SYSDATE,'YYYY-MM-DD') CCDATE
              FROM    DUAL
넣고

R_RESULT VARCHAR2(100); 으로 바꾸고 해보세요
 

그럼 원인이 나오겠죠

아마도 TRUNC(SYSDATE) =  to_date('2014-12-18','yyyy-mm-dd') 부분이 자동 타입(포맷)변환이 되지 않는거 같네요 타입(포맷)을 맞춰보세요
서버 date format 확인하기

select value from v$parameter where name like 'nls_date_format'

 클라이언트 date format 확인

select trunc(sysdate) from dual;

 

최성준(junkk)님이 2014-12-19 15:31에 작성한 댓글입니다.
이 댓글은 2014-12-19 15:46에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
40656import 에러발생 도와주세요.. [1]
엠제이준
2014-12-22
8830
40655statement trigger 에서 변경된 데이터 확인 방법 [3]
뉴비
2014-12-20
6521
40654Oracle 9i DB 복구방법 [1]
박태학
2014-12-19
6491
40653SYSDATE FUNCTION 과 SQL 결과값이 다른데 확인 부탁드립니다. [3]
박재덕
2014-12-18
6435
40652현지 시간으로 저장하기 [1]
한동훈
2014-12-16
6597
40651BETWEEN 질문이요. 고수님들에게 [1]
그랜드
2014-12-16
6467
40650데이터를 순차적으로 정렬후 그룹으로 묶고 싶습니다 [1]
황민환
2014-12-15
6332
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다