업데이트 후 전체 행이 동일하게 유지되는지 트리거를 확인하는 방법은 무엇입니까?


11

물론 나는 다음과 같이 비교하는 모든 열에 대해 할 수 있습니다

if (old.column1 = new.column1 and old.column2 = new.column2...)

그러나 나중에 다른 열을 추가하면 하드 코딩되어 유지 관리하기가 어려울 것입니다.

모든 개별 열을 수동으로 확인하지 않고 모든 열이 동일하게 유지되는지 확인하는 방법이 있습니까?


- 당신은 제외하고 사용할 수 techonthenet.com/postgresql/except.php
스콧 Hodgin

죄송하지만 제 경우에는 EXCEPT가 어떻게 사용됩니까? 이전 행과 새 행 값을 비교하려고합니다. EXCEPT에 대해 알고있는 것으로 트리거의 이전 / 새 컨텍스트가 아닌 두 쿼리의 기존 행을 비교하는 데 사용됩니다.
Mateus Viccari

나는 당신의 dbms에 익숙하지 않습니다-new를 선택하는 방법이 있습니까? * old를 선택하십시오. *? 행 개수 = 0 경우, 행이 변경
스콧 Hodgin

답변:


15

NULL 값을 올바르게 처리하는를 사용 old하여 new레코드 와 레코드를 간단히 비교할 수 있습니다 is not distinct from(모든 열이 NOT NULL로 정의 된 경우 =또는을 사용할 수 있음 <>)

if old is not distinct from new then 
   .... do something
end if;

하나 이상의 열이 변경되었는지 확인하기 위해 동일한 작업을 수행 할 수 있습니다.

if old is distinct from new then 
   .... do something
end if;

이러한 조건은 NULL을 어떻게 처리합니까?
ypercubeᵀᴹ

@ ypercubeᵀᴹ : 좋은 지적입니다. 내 답변을 업데이트했습니다.
a_horse_with_no_name

Thnx. 나는 빠른 점검을했고 old=new그 사건을 정확하게 처리하는 것처럼 보입니다 old is not distinct from old. 즉, old=newNULL 결과를 제공하는 경우를 찾을 수 없습니다 . 나는 그것을 기대하지 않았다!
ypercubeᵀᴹ

나는 그 차이가있을 것이라고 생각 old <> new하지만 완전히 확신하지는 못한다.
a_horse_with_no_name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.