반응형
표현식을 사용한 Oracle 고유 제약 조건
한다Oracle
그러한 표현으로 제약 조건을 지원할 수 있습니까?
알림 Z = 'N'
ALTER TABLE A ADD CONSTRAINT U_A_KEY UNIQUE(X,Y,Z = 'N');
이것은Unique constraint
가능할까요?
예:
INSERT INTO A VALUES('X','Y','N'); --OK
INSERT INTO A VALUES('X','Y','Y'); --OK
INSERT INTO A VALUES('X','Y','Y'); --OK
INSERT INTO A VALUES('X','Y','N'); --VOLIATION
어쩌면 이것이 우리가 생각해낼 수 있을지도
drop table tq84_n;
create table tq84_n (
x number,
y number,
z varchar2(10)
);
create unique index tq84_n_x on tq84_n (
case when z = 'N' then x || '-' || y
else null
end
);
나중에:
insert into tq84_n values (4,5, 'N');
insert into tq84_n values (9,6, 'Y');
insert into tq84_n values (9,6, 'Y');
insert into tq84_n values (4,5, 'Y');
insert into tq84_n values (4,5, 'N');
마지막 던지기:
ORA-00001: unique constraint (SPEZMDBA.TQ84_N_X) violated
이 경우 가장 간단한 방법은 일반적으로 함수 기반 인덱스를 만드는 것입니다.뭐 이런 거.
CREATE UNIQUE INDEX u_a_key
ON a( (CASE WHEN z = 'N' THEN x ELSE null END),
(CASE WHEN z = 'N' THEN y ELSE null END) );
z가 'N'이 아닌 경우 두 CASE 문 모두 NULL로 평가되며 Oracle은 x & y 값을 인덱스 구조에 저장할 필요가 없습니다(인덱스가 더 작음).z가 'N'이면 x & y 값이 모두 인덱스에 저장되며 인덱스는 다른 복합 인덱스와 마찬가지로 동작합니다.
그 상황에서 제가 하는 일은 예를 들어 열을 만드는 것입니다.Z
당신의 경우, 다음과 같은 것이 있습니다.
- 특정 값(예: "N")이 고유해야 할 경우
- null이 아니면 알 수 없음을 의미합니다. 알 수 없는 두 값은 서로 같지 않은 것으로 간주됩니다.
그런 다음 고유한 제약 조건을 생성할 수 있습니다.UNIQUE(X,Y,Z)
.
X와 Y가 같은 두 행과 Z="N"을 추가하면 오류가 발생합니다. X와 Y가 같은 두 행을 Z=null와 함께 추가하면 오류가 발생합니다.
언급URL : https://stackoverflow.com/questions/4648371/oracle-unique-constraint-with-expression
반응형
'source' 카테고리의 다른 글
앵귤러를 섞을 가치가 있을까요?JS 및/또는 검도UI? (0) | 2023.10.21 |
---|---|
추가 필드 추가 - Wordpress (wp_insert_user & update_user_meta가 작동하지 않음) (0) | 2023.10.21 |
숫자에서 MySQL MOONTHNAME() (0) | 2023.10.16 |
Jpa - Hibernate ManyToMany 많은 사람들이 조인 테이블에 삽입합니다. (0) | 2023.10.16 |
*nix 의사단말기는 어떻게 작동합니까?마스터/슬레이브 채널은 무엇입니까? (0) | 2023.10.16 |