2012-04-26 64 views
0

我已經有了一個帶有文本欄欄的表格foo。在該表中我有一個更新後觸發,基本上是以下幾點:Text Field Equality


CREATE OR REPLACE FUNCTION update_foo() 
RETURNS TRIGGER 
SECURITY DEFINER 
AS 
$_$ 
DECLARE 
BEGIN 
    IF TG_OP = 'UPDATE' and NEW.bar = OLD.bar THEN 
    return NEW; 
    END IF; 

    /* Do some stuff */ 

END 
$_$ 
LANGUAGE PLPGSQL; 

然後我做這樣的事情:Update foo set bar = bar || '';

但是當文本值相等時它不會保留。

我的問題是爲什麼不PostgreSQL 8.3,特別是PL/PgSQL叫他們平等和早日退出?

聲明:表,字段和變量名稱已從其原始版本更改爲允許在線發佈。

回答

3

這是因爲其中一個值爲空。 和空不能等於任何其他值,

所以,你需要添加額外的標準

(New.bar is null or Old.bar is null) 

或者

NEW.bar is not distinct from OLD.bar 
+0

原來我有同時影響幾個NULL字段這檢查是否在重要領域中發生了變化。 – bitcycle 2012-04-26 23:04:53