Bir güncellemeden sonra tüm satır aynı kalırsa bir tetikleyici nasıl kontrol edilir?


11

Tabii ki bunu karşılaştırarak her sütun için yapabilirdi:

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

Ancak, örneğin gelecekte başka bir sütun eklersem zor kodlanır ve bakımı zor olur.

Her sütunu elle kontrol etmeden tüm sütunların aynı kalıp kalmadığını kontrol etmenin bir yolu var mı?


EXCEPT kullanabilir misiniz - techonthenet.com/postgresql/except.php
Scott

Maalesef benim durumumda EXCEPT nasıl kullanılır? Eski satır yeni satır değerleri ile karşılaştırmaya çalışıyorum, bildiğim dışında, bir tetikleyicinin eski / yeni bağlamında değil, iki sorgu mevcut satırları karşılaştırmak için kullanılır ...
Mateus Viccari

Ben dbms aşina değilim - yeni seçmenin bir yolu var mı? * Eski seçin dışında. *? Satır sayısı = 0 ise, satır değişmedi
Scott Hodgin

Yanıtlar:


15

NULL değerlerini doğru şekilde işleyen oldve newkullanarak kayıtları karşılaştırabilirsiniz is not distinct from(eğer tüm sütunlar NULL DEĞİL olarak tanımlanmışsa =ya da kullanabilirsiniz <>)

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

Aynı şey, en az bir sütunun değişip değişmediğini kontrol etmek için de yapılabilir:

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

NULL'lar bu koşullarla nasıl ele alınır?
ypercubeᵀᴹ

@ ypercubeᵀᴹ: iyi bir nokta. Cevabımı güncelledim.
a_horse_with_no_name

Thnx. Hızlı bir kontrol yaptım old=newve dava tam olarak olduğu gibi işliyor old is not distinct from old. Başka bir deyişle, old=newNULL sonuç veren bir durum bulamadım . Bunu beklemiyordum!
ypercubeᵀᴹ

Sanırım aradaki fark bu olacak old <> newama tam olarak emin değilim.
a_horse_with_no_name
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.