병합 - 테이블의 조건부 삽입, 업데이트 또는 삭제
[withWith_Query
[, ...]]target_table_name
[ *] [[as]target_alias
]data_source
onjoin_condition
when_clause
[...]어디data_source
is :[전용]source_table_name
[ *] | (Source_Query
) [[as]source_alias
] andwhen_clause
is :일치 할 때 [and조건
] 그런 다음merge_update
|merge_delete
| 아무것도하지 않습니다 |조건
] 그런 다음merge_insert
| 아무것도하지 않아andmerge_insert
is :삽입 [(column_name
[, ...])]표현
| 기본값 [, ...]) |andmerge_update
is :업데이트 세트column_name
= {표현
| 기본값 |column_name
[, ...]) = [row] (표현
| 기본값 [, ...]) |column_name
[, ...]) = (sub-select
)andmerge_delete
is :삭제
병합
식별 된 대상 젠 토토에서 행을 수정하는 동작을 수행합니다.target_table_name
, 사용data_source
. 병합
단일 제공SQL조건부로 할 수있는 진술삽입
, 업데이트
또는삭제
행, 여러 절차 언어 진술이 필요한 작업.
먼저,병합
명령에서 join을 수행합니다data_source
0 이상의 후보 변경 행을 생성하는 대상 젠 토토에. 각 후보 변경 행에 대해의 상태일치
또는일치하지 않음
한 번만 설정하고 그 후언제
절정은 지정된 순서로 평가됩니다. 각 후보 변경 행에 대해 TRUE로 평가하는 첫 번째 조항이 실행됩니다.언제
후보 변경 행에 대해 조항이 실행됩니다.
병합
행동은 정기적 인 것과 동일한 영향을 미칩니다업데이트
, 삽입
또는삭제
같은 이름의 명령. 해당 명령의 구문은 다릅니다. 특히여기서
절과 젠 토토 이름이 지정되지 않습니다. 모든 동작은 대상 젠 토토을 참조하지만 다른 젠 토토에 대한 수정은 트리거를 사용하여 이루어질 수 있습니다.
언제아무것도하지 않습니다
지정되어 소스 행이 건너 뜁니다. 행동이 지정된 순서로 평가되므로아무것도하지 않습니다
보다 세밀한 취급을하기 전에 비 관심있는 소스 행을 건너 뛰는 데 유용 할 수 있습니다.
별도의 것이 없습니다병합
특권. 업데이트 작업을 지정하면가 있어야합니다.업데이트
대상 젠 토토의 열에있는 특권set
절. 삽입 작업을 지정하면가 있어야합니다.삽입
대상 테이블의 권한. 삭제 조치를 지정하면가 있어야합니다.삭제
대상 젠 토토의 권한. A를 지정하는 경우아무것도하지 않습니다
행동, 당신은가 있어야합니다.select
대상 젠 토토의 최소 한 열의 특권. 당신은 또한 필요합니다select
data_source
및 대상 젠 토토의조건
(포함join_condition
) 또는표현
. 권한은 명세서 시작시 한 번 테스트되며 특정 여부를 확인합니다언제
조항이 실행됩니다.
병합
대상 테이블이 구체화 된보기, 외국 표, 또는 규칙에 정의 된 규칙이있는 경우 지원되지 않습니다.
With_Query
thewith
절에서 이름으로 언급 할 수있는 하나 이상의 하위 쿼리를 지정할 수 있습니다병합
쿼리. 보다섹션 7.8andselect자세한 내용. 참고with recursive
병합
.
target_table_name
병합 할 대상 테이블의 이름 (선택적으로 스키마 자격). 만약에전용
테이블 이름 앞에 지정되어 있으며, 일치 행이 명명 된 테이블에서만 업데이트되거나 삭제됩니다. 만약에전용
지정되지 않았으며, 일치 행은 지정된 테이블에서 상속되는 테이블에서 업데이트되거나 삭제됩니다. 선택적으로,*
젠 토토 이름 후에 지정하여 자손 젠 토토이 포함되어 있음을 명시 적으로 표시 할 수 있습니다. 그만큼전용
키워드 및*
옵션 삽입 동작에 영향을 미치지 않으며 항상 이름이 지정된 테이블에만 삽입됩니다.
target_alias
대상 젠 토토의 대체 이름. 별칭이 제공되면 젠 토토의 실제 이름을 완전히 숨 깁니다.foo로 foo로 f
, 나머지병합
Statement는이 표를로 언급해야합니다.f
notfoo
.
source_table_name
소스 테이블,보기 또는 전환 테이블의 이름 (선택적으로 스키마 자격). 만약에전용
테이블 이름 앞에 지정되어 있으며, 일치 행은 명명 된 테이블에서만 포함됩니다. 만약에전용
지정되지 않았으며, 일치 행은 이름이 지정된 테이블에서 상속되는 테이블에서도 포함됩니다. 선택적으로,*
젠 토토 이름 후에 지정하여 자손 젠 토토이 포함되어 있음을 명시 적으로 표시 할 수 있습니다.
Source_Query
query (select
Statement 또는값
statement) 대상 테이블에 병합 될 행을 제공하는 것. 참조selectStatement 또는값구문 설명에 대한 명령문.
source_alias
데이터 소스의 대체 이름. 별칭이 제공되면 젠 토토의 실제 이름이나 쿼리가 발행되었다는 사실을 완전히 숨 깁니다.
join_condition
join_condition
부울
(A와 유사여기서
절)에서 어떤 행을 지정하는.data_source
대상 테이블의 행을 일치시킵니다.
일치하려는 대상 테이블의 열만data_source
행이 나타나야join_condition
. join_condition
대상 테이블의 열만 참조하는 하위 표현은 종종 놀라운 방식으로 어떤 조치를 취할 수 있는지에 영향을 줄 수 있습니다.
when_clause
적어도 하나언제
조항이 필요합니다.
언제
조항을 지정합니다일치 할 때
그리고 후보 변경 행은 대상 테이블에서 행과 일치합니다.언제
|조건
결석하거나 평가합니다true
.
반대로,언제
조항을 지정합니다일치하지 않을 때
그리고 후보 변경 행은 대상 테이블의 행과 일치하지 않습니다.언제
|조건
결석하거나 평가합니다true
.
조건
유형 값을 반환하는 표현식부울
. A에 대한이 표현이 있다면언제
절이 반환true
, 그러면 해당 조항에 대한 조치가 해당 행에 대해 실행됩니다.
a일치 할 때
절은 소스와 대상 관계의 열을 참조 할 수 있습니다. A의 상태일치하지 않을 때
절은 정의에 따라 일치하는 대상 행이 없기 때문에 소스 관계의 열만 참조 할 수 있습니다. 대상 테이블의 시스템 속성 만 액세스 할 수 있습니다.
merge_insert
AN의 사양삽입
한 행을 대상 테이블에 삽입하는 동작. 대상 열 이름은 어떤 순서로든 나열 될 수 있습니다.
명시 적 또는 암시 적 열 목록에 존재하지 않는 각 열에는 기본값이 채워집니다.
대상 테이블이 분할 된 테이블 인 경우 각 행은 적절한 파티션으로 라우팅되어 삽입됩니다. 대상 테이블이 파티션 인 경우 입력 행이 파티션 제약 조건을 위반하면 오류가 발생합니다.
열 이름이 두 번 이상 지정되지 않을 수 있습니다.삽입
동작은 하위 선택을 포함 할 수 없습니다.
하나만값
절을 지정할 수 있습니다. 그만큼값
조항은 정의에 따라 대상 행이 일치하지 않기 때문에 소스 관계의 열만 참조 할 수 있습니다.
merge_update
AN의 사양업데이트
대상 테이블의 현재 행을 업데이트하는 조치. 열 이름은 두 번 이상 지정되지 않을 수 있습니다.
젠 토토 이름이나 A여기서
조항이 허용됩니다.
merge_delete
지정삭제
대상 테이블의 현재 행을 삭제하는 동작. 일반적으로 A와 같이 테이블 이름이나 다른 조항을 포함하지 마십시오.삭제명령.
column_name
대상 테이블의 열 이름. 열 이름은 필요한 경우 하위 필드 이름 또는 배열 첨자로 자격을 갖추 수 있습니다.
시스템 가치 재정의
이 조항이 없으면 명시 적 값을 지정하는 것은 오류입니다 (기본값
) 정의 된 신분 열에 대한항상 생성
. 이 조항은 해당 제한을 무시합니다.
사용자 값 재정의
이 조항이 지정된 경우 정의 된 신분 열에 제공되는 값기본적으로 생성
무시되고 기본 시퀀스 생성 값이 적용됩니다.
기본값
모든 열에는 기본값으로 채워집니다. (an재정의
조항은이 양식에서 허용되지 않습니다.)
표현
열에 할당하는 표현식. A에서 사용되는 경우일치 할 때
절에서, 표현식은 대상 테이블의 원래 행에서 값을 사용할 수 있고data_source
행. A에서 사용되는 경우일치하지 않을 때
절, 표현식은의 값을 사용할 수 있습니다data_source
행.
기본값
열을 기본값으로 설정합니다 (NULL
특정 기본 표현식이 할당되지 않은 경우).
sub-select
A select
이전의 괄호 화 된 열 목록에 나열된 많은 출력 열을 생성하는 하위 쿼리. 하위 쿼리는 실행될 때 1 행을 넘어서는 안됩니다.data_source
행.
성공적인 완료시 A병합
명령은 양식의 명령 태그를 반환
병합Total_Count
theTotal_Count
총 행이 변경되었는지 (삽입, 업데이트 또는 삭제하든). 만약에Total_Count
0, 어떤 식 으로든 행이 변경되지 않았습니다.
다음 단계는 실행 중에 발생합니다.병합
.
성능이전 명령문
지정된 모든 조치에 대한 트리거언제
Clauses Match.
소스에서 대상 젠 토토로 조인을 수행합니다. 결과 쿼리는 정상적으로 최적화되며 일련의 후보 변경 행을 생성합니다.
각 행이 있는지 평가합니다일치
또는일치하지 않음
.
각각 테스트언제
진실이 반환 될 때까지 지정된 순서의 조건.
조건이 진실을 반환하면 다음 조치를 수행하십시오.
성능전 행 전
행동의 이벤트 유형에 대한 발사 트리거.
지정된 조치를 수행하여 대상 테이블에서 확인 제약 조건을 호출합니다.
성능After Row
행동의 이벤트 유형에 대한 발사 트리거.
성능이후의 명령문
실제로 발생하는지 여부에 관계없이 지정된 작업에 대한 트리거. 이것은 an의 행동과 유사합니다업데이트
행을 수정하는 진술.
요약하면, 이벤트 유형에 대한 명세서 트리거 (예 :삽입
) 우리가 언제마다 해고 될 것입니다지정그런 종류의 행동. 대조적으로,로드 레벨 트리거는 특정 이벤트 유형에 대해서만 발사됩니다실행. 그래서 A병합
Command Make Fire 성명서 트리거가 둘 다업데이트
and삽입
업데이트
행 트리거가 해고되었습니다.
가입이 각 대상 행에 대해 최대 하나의 후보 변경 행을 생성해야합니다. 다시 말해, 대상 행은 둘 이상의 데이터 소스 행에 결합해서는 안됩니다.병합
. 반복적 인 행동이 인 경우삽입
, 이로 인해 고유성 위반이 발생하지만 반복업데이트
또는삭제
카디널리티 위반을 일으킬 것입니다. 후자의 행동은에 의해 필요합니다.SQL표준. 이것은 역사적으로 다릅니다PostgreSQL조인의 행동업데이트
and삭제
동일한 행을 수정하려는 두 번째 및 후속 시도가 단순히 무시되는 진술.
if a언제
조항은 an을 생략합니다.and
하위 클라스, 그것은 그러한 종류의 최종 도달 조항이됩니다 (일치
또는일치하지 않음
). 나중에언제
그러한 종류의 조항은 지정되어있을 수 없으며 오류가 발생합니다. 최종 도달 조항이 어느 한 종류로 지정되지 않으면 후보 변경 행에 대한 조치를 취하지 않을 수 있습니다.
데이터 소스에서 행이 생성되는 순서는 기본적으로 불확실합니다. 에이Source_Query
필요한 경우 일관된 순서를 지정하는 데 사용될 수 있습니다. 이는 동시 거래 사이의 교착 상태를 피하기 위해 필요할 수 있습니다.
없음반환
절의 조항병합
. 의 행동삽입
, 업데이트
and삭제
포함 할 수 없음반환
또는with
클로즈.
언제병합
대상 테이블을 수정하는 다른 명령과 동시에 실행되면 일반적인 트랜잭션 격리 규칙이 적용됩니다. 보다섹션 13.2각 격리 수준에서 동작에 대한 설명. 사용을 고려하고 싶을 수도 있습니다.삽입 ... 충돌
실행 능력을 제공하는 대체 진술로서업데이트
동시에삽입
발생합니다. 두 문장 유형 사이에는 다양한 차이점과 제한이 있으며 교환 할 수 없습니다.
유지 보수 수행customer_accounts
신규 기반최근_transactions
.
Customer_Account CA에 합병하십시오
이것은이기 때문에 다음 진술과 정확히 동일합니다.일치
실행 중에 결과가 변경되지 않습니다.
Customer_Account CA에 합병하십시오
재고량과 함께 새 재고 품목을 삽입하려고 시도하십시오. 항목이 이미 존재하는 경우 대신 기존 품목의 재고 수를 업데이트하십시오.
와인으로 합병 w
theWine_stock_changes
예를 들어 최근 데이터베이스에로드 된 임시 젠 토토이 될 수 있습니다.
이 명령은에 부합합니다.SQL표준.
thewith
절 및아무것도하지 않습니다
행동은에 대한 확장입니다.SQL표준.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면