2016-11-07 37 views
1

你可以是这样的:在触发功能如何使一个foreach变量PLPGSQL新老

foreach m slice 1 IN array NEW.* 
loop 
RAISE NOTICE 'var: %', m; 
END LOOP; 

,或者

FOR i IN NEW LOOP 
    RAISE NOTICE 'var: %', i; 
END LOOP 
+0

什么是你的问题? –

回答

1

NEW and OLD are special record variables。你不能像通过数组一样循环它们。通过列

一种方式循环播放(知名)记录或行:转换为jsonjsonb,然后:

CREATE OR REPLACE FUNCTION foo() 
    RETURNS trigger AS 
$BODY$ 
DECLARE 
    js jsonb := to_jsonb(NEW); 
    col text; 
BEGIN 
    FOR col IN SELECT * FROM jsonb_object_keys(js) 
    LOOP 
     RAISE NOTICE '%: %', col, js->>col; 
    END LOOP; 

    RETURN NEW; 
END 
$BODY$ 
    LANGUAGE plpgsql VOLATILE; 
相关问题