2015-12-08 42 views
0

当我尝试更新时,出现错误。任何帮助,高度赞赏!更新前的PostgreSQL触发器

CREATE OR REPLACE FUNCTION test_x(value integer) 
    RETURNS trigger AS 
$BODY$ 
DECLARE 

BEGIN 
update backups.scrap_v16_sah_mil_hur_bak set value = '-99' where scrap_durum =1 and (char_length(value) < 5 or value= '' or value is null or value like '%Belir%' ); 

    RETURN value; 
END;$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 


ALTER FUNCTION test_x(value) 
    OWNER TO postgres; 

GRANT EXECUTE ON FUNCTION backups.scrap_v16_sah_mil_hur_bak(value) TO public; 
GRANT EXECUTE ON FUNCTION backups.scrap_v16_sah_mil_hur_bak(value) TO postgres; 

CREATE TRIGGER test_x 
BEFORE UPDATE 
ON backups.scrap_v16_sah_mil_hur_bak 
FOR EACH ROW 
EXECUTE PROCEDURE test_x(); 

该错误消息是

ERROR: trigger functions cannot have declared arguments HINT: The arguments of the trigger can be accessed through TG_NARGS and TG_ARGV instead. CONTEXT: compilation of PL/pgSQL function "test_x" near line 1

回答

0

误差来自于声明函数参数在

CREATE OR REPLACE FUNCTION test_x(value integer)

触发器通常使用包含新的值$ NEW和$ OLD关联数组或INSERT或UPDATE操作的旧表格行,或DELETE的空白表格行。

查看完整的示例和说明PL/PGSQL触发器http://www.postgresql.org/docs/9.3/interactive/pltcl-trigger.html

+0

此代码我从另一台服务器获取数据。首先,我从服务器获取数据,稍后检查传入的数据。如果数据的长度小于5或空值,我想更改新值。我怎样才能做到这一点? İn这种方式谢谢你的回答。 – SezKo