'분류 전체보기'에 해당되는 글 83건

  1. 2010.08.13 Create View 생성 Query문의 오류
  2. 2010.08.13 미리보는 2019년 미래생활 1
  3. 2010.08.13 세스코, '마크찍고 선물받자' 이벤트 시즌2 개최 1

Create View 생성 Query문의 오류

Oracle 2010. 8. 13. 16:09
어제 개발자분이 이전까지는 동일한 Create View Query문으로 Error 없이 잘 생성해서 사용해 왔는데,

Oracle 11g R2에서 동일한 Query문을 가져다 하니, Error가 발생하면서 View가 생성이 안된다고 하더군요.

그래서, Create View Query문을 받아서 확인해봤습니다.

눈으로만 딱 보니, Group By절에 Define되어 있는 Column이 Select 절에는 존재하지 않았습니다.

예를 들면 아래와 같은 형식이지요.

select  ename, job, mgr
from     emp
group  ename, job;

대부분 위의 Query문을 보고, 아 mgr Column에 대해서 집계 함수를 이용해서 표시를 해주거나,

Group by 절에 mgr을 포함시켜주어야 겠구나 하는 생각이 드실 것입니다.

하지만, 아래와 같은 경우에서 그 생각이 산산히 부서집니다. (동일한 형태로 SCOTT 계정을 이용해서 재현해보았습니다.)


============================================================================================================
1. 아래와 같이 scott 계정의 emp Table을 Hiredate column을 참조하는 View를 하나 생성합니다.

SCOTT@david11gR1>create or replace view v_emp_hiredate
  2  (hiredttm, hiredate, hiretime)
  3  as
  4  select hiredate, to_char(hiredate,'yyyymmdd') as hiredate, to_char(hiredate, 'hh24:mi:ss') as hitetime
  5  from emp
  6  with read only;

뷰가 생성되었습니다.

2. 생성된 View가 정상적으로 잘 작동하는지 확인해 봅니다.

SCOTT@david11gR1>select * from v_emp_hiredate;

HIREDTTM HIREDATE HIRETIME
-------- -------- --------
80/12/17 19801217 00:00:00
81/02/20 19810220 00:00:00
81/02/22 19810222 00:00:00
81/04/02 19810402 00:00:00
81/09/28 19810928 00:00:00
81/05/01 19810501 00:00:00
81/06/09 19810609 00:00:00
87/04/19 19870419 00:00:00
81/11/17 19811117 00:00:00
81/09/08 19810908 00:00:00
87/05/23 19870523 00:00:00
81/12/03 19811203 00:00:00
81/12/03 19811203 00:00:00
82/01/23 19820123 00:00:00

14 개의 행이 선택되었습니다.


3. 위와 같이 정상적으로 생성된 View를 참조하는 다른 View를 생성합니다.
    (Group By 절에서 의도적으로 hiredttm만 define하고, hiredate와 hiretime은 누락시킵니다.)

SCOTT@david11gR1>create or replace view v_test
  2  (hiredttm, hiredate, hiretime, tot)
  3  as
  4  select hiredttm, hiredate, hiretime, count(0) as tot
  5  from v_emp_hiredate
  6  group by hiredttm
  7  with read only;

뷰가 생성되었습니다.

Select 절의 구문 오류로 인해서 Error가 발생하면서, View가 생성되지 않을 줄 알았는데,
정상적으로 생성이 됩니다.

그래서, Data는 정상적으로 되는지 조회해 봅니다.

SCOTT@david11gR1>select * from v_test;

HIREDTTM HIREDATE HIRETIME        TOT
-------- -------- -------- ----------
80/12/17 19801217 00:00:00          1
81/02/20 19810220 00:00:00          1
81/02/22 19810222 00:00:00          1
81/04/02 19810402 00:00:00          1
81/05/01 19810501 00:00:00          1
81/06/09 19810609 00:00:00          1
81/09/08 19810908 00:00:00          1
81/09/28 19810928 00:00:00          1
81/11/17 19811117 00:00:00          1
81/12/03 19811203 00:00:00          2
82/01/23 19820123 00:00:00          1
87/04/19 19870419 00:00:00          1
87/05/23 19870523 00:00:00          1

13 개의 행이 선택되었습니다.

결과상에 문제 없이 정상적으로 조회가 되었습니다.

============================================================================================================



이 현상은 Oracle 11gR1이하 버전에서 동일하게 나타납니다. (Oracle 8i, 9i, 10g, 11gR1 여기까지만 확인해봄)

그래서 이번에는 위와 동일한 내용으로 Oracle 11gR2에서 확인해보도록 하겠습니다.

============================================================================================================

1. 먼저 위의 테스트와 동일하게 scott 계정의 emp Table을 Hiredate column을 참조하는 View를 하나 생성합니다.
SCOTT@david11gR2>create or replace view v_emp_hiredate
  2  (hiredttm, hiredate, hiretime)
  3  as
  4  select hiredate, to_char(hiredate,'yyyymmdd') as hiredate, to_char(hiredate, 'hh24:mi:ss') as hitetime
  5  from emp
  6  with read only;

뷰가 생성되었습니다.

2. 이제 문제의 View를 생성해봅니다.
SCOTT@david11gR2>create or replace view v_test
  2  (hiredttm, hiredate, hiretime, tot)
  3  as
  4  select hiredttm, hiredate, hiretime, count(0) as tot
  5  from v_emp_hiredate
  6  group by hiredttm
  7  with read only;
select hiredttm, hiredate, hiretime, count(0) as tot
                 *
4행에 오류:
ORA-00979: GROUP BY 표현식이 아닙니다.

우리가 일반적으로 생각하던 오류를 발생시키면서, View를 생성하지 못합니다.

============================================================================================================

왜 이와 같은 현상이 발생하는지 그에 대한 명확한 원인은 모르겠습니다.

단순히, Oracle의 Bug일까요?? 아니면, hiredate와 hiretime의 값 자체가 emp.hiredate의 값으로 부터 파생된 값이기

때문에 이를 Check할 필요가 없다고 판단한 것일까요?? (이건 좀 억지스럽군요)

아무튼 Oracle 11g R2의 Compiler는 좀 더 똑똑해진듯 합니다. 우리의 생각처럼 제대로 오류를 발생시켜주니 말이죠.

혹시라도, 위의 증상에 대해서 원인을 설명해주실 수 있으신 분이 있으시면 답변 부탁드리겠습니다.
:     

TISTORY에 Login하려면 여기를 누르세요.


미리보는 2019년 미래생활

IT News 2010. 8. 13. 12:41
:     

TISTORY에 Login하려면 여기를 누르세요.


세스코, '마크찍고 선물받자' 이벤트 시즌2 개최

Happening 2010. 8. 13. 11:46

세스코의 세스코 멤버스 '마크찍고 선물받자' 이벤트가 다양해진 선물과 응모방법을 도입해 시즌2로 돌아왔다.

27일 세스코에 따르면 이번 이벤트는 총 100일간 다음달 2일부터 11월9일까지 진행된다. 기본 응모방법은 작년과 동일하게 식당, 매장, 건물 등에 부착된 세스코멤버스 마크를 사진으로 찍어 휴대폰으로 전송하거나 세스코멤버스 웹사이트 혹은 트위터로 응모하면 된다. 

사진을 전송한 참여자에게 매일 5000명, 총 이벤트 기간동안 50만명에게 다양한 즉석선물을 제공한다.

또한 시즌 2에서는 ‘친구추천’을 새롭게 진행한다. 세스코멤버스 웹싸이트에서 자신의 핸드폰 번호로 로그인을 하여 친구에게 이벤트에 참여하라는 추천문자를 전송하면 된다. 

이 때 추천받은 친구가 응모하면 선착순 50명에게 미니벨로 자전거를, 추천한 친구가 가장 많이 응모한 상위 30명에게는 아이패드를 증정할 예정이다.

세스코 관계자는 "작년 세스코멤버스 이벤트 이후 고객님들의 높은 관심에 감사의 뜻으로 다시 한 번 이벤트를 준비했다"며 "세스코 멤버스 인증마크가 환경과 위생에 대한 믿음과 안심을 약속드리는 마크인만큼 차후 소비자 선택 기준으로 자리잡아 전국민의 건강한 삶을 지키는데 일조하고 싶다” 라고 밝혔다.   

출처 : 메디컬투데이
:     

TISTORY에 Login하려면 여기를 누르세요.