2013-10-31 42 views
0

我在我的桌子上創建了一個觸發器。當插入/更新/刪除它添加一個關鍵我,你這樣。 我試圖插入另一臺這個密鑰,但給我的錯誤這樣的:列「我」不存在

ERROR: column "i" does not exist 
    LINE 1: ...(operation,stamp,userid,empname,salary) VALUES('||i||', now(... 
                   ^
    QUERY: SELECT dblink_exec('INSERT INTO emp_audit(operation,stamp,userid,empname,salary) VALUES('||i||', now(), user,NEW.*)') 
    CONTEXT: PL/pgSQL function process_emp_audit() line 14 at PERFORM 


    ********** Error ********** 

    ERROR: column "i" does not exist 
    SQL state: 42703 
    Context: PL/pgSQL function process_emp_audit() line 14 at PERFORM 

我不知道它爲什麼給我這個error.And這是我的觸發功能

-- Function: process_emp_audit() 

-- DROP FUNCTION process_emp_audit(); 

CREATE OR REPLACE FUNCTION process_emp_audit() 
    RETURNS trigger AS 
$BODY$ 
    BEGIN 
    PERFORM dblink_connect('dbname=ekders port=5432 user=****** password=*****'); 

     IF (TG_OP = 'DELETE') THEN 
     PERFORM dblink_exec('INSERT INTO emp_audit "D", now(), user, OLD.*;'); 
     PERFORM dblink_disconnect(); 
     RETURN OLD; 
     ELSIF (TG_OP = 'UPDATE') THEN 
     PERFORM dblink_exec('INSERT INTO emp_audit "U", now(), user, NEW.*;'); 
     PERFORM dblink_disconnect(); 
     RETURN NEW; 
     ELSIF (TG_OP = 'INSERT') THEN 
     PERFORM dblink_exec('INSERT INTO emp_audit(operation,stamp,userid,empname,salary) VALUES('||i||', now(), user,NEW.*)'); 
     PERFORM dblink_disconnect(); 
      RETURN NEW; 
     END IF; 
     RETURN NULL; -- result is ignored since this is an AFTER trigger 
    END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION process_emp_audit() 
    OWNER TO postgres; 
+0

'i'是行不通定義... –

回答

2

您的代碼正嘗試將值不存在的值i連接到字符串。我懷疑你真正想做的是逃避單引號。下面的應工作:

PERFORM dblink_exec('INSERT INTO emp_audit(operation,stamp,userid,empname,salary) VALUES(''i'', now(), user,NEW.*)'); 
+0

+1,而對於其他查詢,目前使用雙引號「'',而不是兩個單引號'‘’'一樣。 –

+0

非常感謝!但我現在有另一個問題。當我嘗試添加類似這樣的東西:insert into emp(empname,salary)VALUES('testdata',10);它給了我列testdata不存在。如何我解決了這個問題?謝謝... – mbpakalin

+0

我將不得不看到代碼,但我懷疑它完全一樣的問題 – StevieG