执行更新始终设置为FALSE

时间:2012-10-16 09:48:58

标签: sql postgresql triggers plpgsql insert-update

我写过以下触发器。

CREATE OR REPLACE FUNCTION tbl_scdr_insert_trigger() RETURNS TRIGGER AS $$
<< fk >>
DECLARE
    rowcount int;
    myrec RECORD;
BEGIN
    EXECUTE 'UPDATE sc_'|| to_char(NEW.start_datetime, 'YYYY_MM') ||' SET a = a + ($1).a, b = b + ($1).b WHERE (e_id = ($1).e_id AND start_datetime = ($1).start_datetime AND c_id = ($1).c_id'
    USING NEW;
    GET DIAGNOSTICS rowcount = ROW_COUNT;
    RAISE NOTICE 'found %', rowcount;
    IF not found THEN
        RAISE NOTICE 'not found';
    ELSIF found THEN
        RAISE NOTICE 'found';
        RETURN NULL;
    END IF;
END;
$$
LANGUAGE plpgsql;

当被调用时,总是将Zero作为Rowcount返回,因为语句未提交但是,即使存在具有相同where子句列值的记录,它仍然是False。

1 个答案:

答案 0 :(得分:2)

正如PostgreSQL documentation所述:

  

EXECUTE更改GET DIAGNOSTICS的输出,但不更改FOUND

这意味着在您的情况下FOUND将始终为FALSE,因为您使用的是EXECUTE而不是静态UPDATE语句。