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 41192 게시물 읽기
No. 41192
오라클 쿼리에 버그가 있네요...
작성자
김흥수(protokhs)
작성일
2016-07-03 19:39ⓒ
2016-07-03 19:48ⓜ
조회수
7,379
 제가 10, 11, 12 전부 테스트해보았는데....
 
전부 오류입니다.
 
with base as
(
    select dbms_random.value(1,100) v1 , dbms_random.value(1,100) v2 from dual
    connect by level < 11
)
select
    a.v1
    ,a.v2
    ,sum(a.v1) over () sum_v1
    ,sum(a.v2) over () sum_v2
from    base a
/
 
 
이 SQL을 실행해보면 그 결과에서 sum_v1과 sum_v2의 결과가 동일하게 sum_v2로 나옵니다.
 
??
 
그런데...
 
:a := 100;
 
with base as
(
    select dbms_random.value(1,100) v1 , dbms_random.value(1,:a) v2 from dual
    connect by level < 11
)
select
    a.v1
    ,a.v2
    ,sum(a.v1) over () sum_v1
    ,sum(a.v2) over () sum_v2
from    base a
/
 
처럼하면 잘 됩니다.
 
그런데 다시
 
with base as
(
    select dbms_random.value(1,:a) v1 , dbms_random.value(1,:a) v2 from dual
    connect by level < 11
)
select
    a.v1
    ,a.v2
    ,sum(a.v1) over () sum_v1
    ,sum(a.v2) over () sum_v2
from    base a
/
 
이와 같이 하면 오류가 납니다...
 
아마도 함수값의 집계시 케싱과 관련한 오류가 아닐까 싶습니다.
dbms_random.value는 결정적 함수가 아닌데 이를 케싱하고 있는 것으로 생각됩니다.
 
그런데 그렇게 생각해도 이상한게....
 
다음과 같이 하면 다시 오류가 납니다.
 
 
 
with args as
(
    select 100 v1,100.0 v2 from dual
)
, base as
(
    select dbms_random.value(1,a.v1) v1 , dbms_random.value(1,a.v2) v2 from args a
    connect by level < 11
)
select
    a.v1
    ,a.v2
    ,sum(a.v1) over () sum_v1
    ,sum(a.v2) over () sum_v2
from    base a
/
 
이상하죠?
이 글에 대한 댓글이 총 1건 있습니다.

쿼리 변환이 엉뚱하게 되는 경우인 것 같아요.
저는 그래서 랜덤함수 쓸때는 항상 WITH 문 안에 /*+ materialize */ 힌트를 사용합니다.

마농(manon94)님이 2016-07-04 10:21에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4119511g se 에 em 설치가 가능한가요?
남영민
2016-07-07
6974
41194실용성 있는 sql 퀴즈입니다. [5]
김흥수
2016-07-07
9911
41193작업시간그룹 기준 최초 최종 가져오기 문의 드립니다. [2]
김미림
2016-07-04
7433
41192오라클 쿼리에 버그가 있네요... [1]
김흥수
2016-07-03
7379
41191update sql 퀴즈입니다. [2]
김흥수
2016-06-30
7339
41190이 sql 의 문제 무엇일까요. 의견부탁드려요. [2]
니노
2016-06-29
7310
41189두개의 테이블 검색(도움요청) [3]
염진호
2016-06-29
7491
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다