본문 바로가기
왕푸짐 이벤트

[이벤트 둘!] 당신의 오라클 내공을 보여주세요!

by EXEM 2010. 12. 1.
Oracle ACE "Dion Cho" 가 직접 출제하는 주옥같은 문제!
당신의 오라클 내공 보여주세요
가장 좋은 정답을 제출한 분께
5만원 상품권을 드립니다

지금 바로 도전하세요~!                                    
지난달 당첨자 및 정답 발표



이번 달 문제는 특정 테이블에 단 하나의 로우만 들어가게 하는 방법입니다.

가령 아래와 같이 동작해야 합니다.

SQL> create table t1(c1 number, c2 number);
 
Table created.
 
SQL> -- 여기에서 어떤 작업을 해야 단 하나의!!! 로우만 들어가게 할 수 있을까요?
{ 단 하나의 로우만 들어가도록 어떤 작업을 한다 }
 
Index created.
 
SQL> insert into t1 values(1, 1);
 
1 row created.
 
SQL> insert into t1 values(2, 2);
insert into t1 values(2, 2)
*
ERROR at line 1:
<< Error Message Here >>

 

위의 내용에서 { 단 하나의 로우만 들어가도록 어떤 작업을 한다 }에 들어갈 SQL 문장(들)을 완성하시는 것이 이번 달의 문제입니다.

어떤 세션이 어떤 데이터를 넣어도 단 하나의 로우만 존재해야 합니다. 즉, 첫번째 로우가 들어간 이후로는 더 이상 인서트가 이루어져서는 안됩니다. 그것을 가능하기 위해 필요한 작업을 SQL 문장(들)으로 정리해서 보내주시면 됩니다.


정답제출: quiz@ex-em.com
정답자 발표 : 2010년 12월 3일 금요일 오후 2시
--------------------------------------------------------------------
퀴즈 접수가 마감되었습니다.

당첨자


정** 
g**@**caretech.com



이벤트에 참여해 주신 모든 분들께 감사드립니다. ^^

퀴즈 정답

테이블에 오직 하나의 로우만 들어가게 하는 가장 간단한 방법은 다음과 같이 Unique Index를 만드는 것입니다.
SQL> create table t1(c1 number, c2 number);

Table created.

SQL> create unique index t1_n1 on t1(1);  -- 상수 값을 가지는 Function Based Index

Index created.

SQL> insert into t1 values(1, 1);

1 row created.

SQL> insert into t1 values(2, 2);
insert into t1 values(2, 2)
*
ERROR at line 1:
ORA-00001: unique constraint (TPACK.T1_N1) violated


SQL> insert into t1 values(null, null);
insert into t1 values(null, null)
*
ERROR at line 1:
ORA-00001: unique constraint (TPACK.T1_N1) violated
여러가지 방법을 생각할 수 있겠지만 가장 간단한 방법이 정답으로 선정된 것으로 이해하시면 되겠습니다.

댓글