[SQL] 오라클 - 업데이트에 가입 - 비 키 보존 테이블을
SQL오라클 - 업데이트에 가입 - 비 키 보존 테이블을
나는 정확히하지 않는 오라클에 존재 명령, "TBL2에서 업데이트 TBL1"는 앵그르를 복제하는 것을 시도하고있다.
내가 사용 그래서 명령 "업데이 트를 (TBL2 ... 가입 TBL1 해당)". "비 키 보존 테이블에 매핑되는 열을 수정할 수 없습니다 ORA-01779는"두 테이블은 기본 키 정의와 나는 나의 고유 행을 식별 된 조인 생각하지만, 난 여전히 얻고있다.
여기에 적절하게 테이블 정의와 내가 실행하기 위해 노력하고있어 업데이트를 익명화 :
CREATE TABLE tbl1
(
ID decimal(11) NOT NULL,
A varchar2(3) NOT NULL,
B float(7),
CONSTRAINT tbl1_pk PRIMARY KEY (ID,A)
)
;
CREATE TABLE tbl2
(
ID decimal(11) NOT NULL,
A varchar2(3) NOT NULL,
B float(15),
C float(15),
D char(1) NOT NULL,
CONSTRAINT tbl2_PK PRIMARY KEY (ID,A,D)
)
;
UPDATE
(select tbl1.b, tbl2.c
from tbl1 inner join tbl2
on tbl1.id=tbl2.id
and tbl1.a=tbl2.a
and tbl1.b=tbl2.b
and tbl1.a='foo'
and tbl2.D='a')
set b=c;
어떻게 오라클은 내가 더 고유성 위반이 없다고 만족하실 것입니다 나의 선택 같은 정의 할 수 있습니다?
해결법
-
==============================
1.당신은 상관 하위 쿼리와 함께이 작업을 수행 할 수 있어야한다
당신은 상관 하위 쿼리와 함께이 작업을 수행 할 수 있어야한다
UPDATE tbl1 t1 SET t1.b = (SELECT c FROM tbl2 t2 WHERE t1.id = t2.id AND t1.a = t2.a AND t1.b = t2.b AND t2.d = 'a') WHERE t1.a = 'foo' AND EXISTS( SELECT 1 FROM tbl2 t2 WHERE t1.id = t2.id AND t1.a = t2.a AND t1.b = t2.b AND t2.d = 'a')
당신이 작성한 것을 UPDATE에 대한 문제는 오라클이 정확히 1 tbl2.c 값이 있음을 보장 할 수 없습니다입니다 단일 tbl1.b 값에 해당합니다. TBL1의 특정 행에 대해 TBL2에서 여러 행이있는 경우, 상관 업데이트는 단일 행 부질의 여러 행을 반환 있음을 나타내는 오류가 발생하는 것입니다. 이 경우, 당신은이 경우에 사용하는 TBL2에서하는 행 지정하는 하위 쿼리 일부 로직을 추가해야 할 것입니다.
-
==============================
2.이 기본 tbl1table을 수정 시도하고 TBL1 테이블 키 보존 뷰에 있지 않기 때문에이 문장은 오류 (ORA-01779가 아닌 키 보존 테이블에 매핑되는 열을 수정할 수 없습니다)와 함께 실패합니다. (ID, A)는 DEPT 테이블의 키이지만, 그것은 가입의 핵심이 아니기 때문에.
이 기본 tbl1table을 수정 시도하고 TBL1 테이블 키 보존 뷰에 있지 않기 때문에이 문장은 오류 (ORA-01779가 아닌 키 보존 테이블에 매핑되는 열을 수정할 수 없습니다)와 함께 실패합니다. (ID, A)는 DEPT 테이블의 키이지만, 그것은 가입의 핵심이 아니기 때문에.
-
==============================
3.당신의보기에 따라 (http://www.orafaq.com/tuningguide/updateable%20view.html)을 키 - 보존도없는 것 같다. 실제로 당신은 허용되지 않는 것 같습니다 차없는 키를에 가입하여합니다.
당신의보기에 따라 (http://www.orafaq.com/tuningguide/updateable%20view.html)을 키 - 보존도없는 것 같다. 실제로 당신은 허용되지 않는 것 같습니다 차없는 키를에 가입하여합니다.
from https://stackoverflow.com/questions/9335536/oracle-update-join-non-key-preserved-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLSRV 및 사용 PHP에서 저장 프로 시저를 실행하는 방법 "을?" 스타일의 매개 변수 (0) | 2020.06.14 |
---|---|
[SQL] 선택 (2008 SQL 서버)에서 두 테이블을 결합 (0) | 2020.06.14 |
[SQL] 동일한 값의 연속 그룹 행 타임 스팬을 이용하여 (0) | 2020.06.14 |
[SQL] 문자열 SQL에서 숫자 있는지 어떻게 확인할 수 있습니까? (0) | 2020.06.14 |
[SQL] 레일의 데이터베이스에 모든 SQL 쿼리 로그 (0) | 2020.06.14 |