0

我需要创建触发器来检查新插入元素的id是否不重复。问题出在LOOP语句中,控制台吐出错误:

CONTEXT:  SQL statement in PL/PgSQL function "foo" near line 7
LINE 1: move forward 1 from  $1

这是我的功能:

create function foo() returns trigger as'
declare xyz cursor for select id from accounts; 
    begin
        LOOP
            if NEW.id = xyz then
                raise notice ''Id is just used!'';
            else
                move forward 1 from xyz;
            end if;
        END LOOP;
    return NEW;
    close xyz;
    end;
' language 'plpgsql';

create trigger foo before insert on accounts for each
row execute procedure foo();
4

1 回答 1

1

您的示例没有意义(您无法将标量值与光标进行比较)。光标自身就像没有任何值的指针。

  如果 NEW.id = xyx 那么

为什么你不做

开始
  IF EXISTS(SELECT * FROM accounts a WHERE a.id = NEW.id) THEN
    RAISE NOTICE ''Id is used''; -- 更好地引发异常
  万一;
  返回新的;
结尾;

第二个废话

  返回新的;
  关闭 xyz; -- RETURN 后不执行任何语句
于 2013-05-21T18:36:28.930 回答