繁体   English   中英

PostgreSQL插入触发器进行串联

[英]Postgresql insert trigger to concatenate

我想创建一个触发器以将我的列与事件“插入前”连接起来,但是查询不起作用,并且出现错误:

SQL错误:

错误:“ SET”第4行或附近的语法错误:SET new.fullname = CONCAT(new.first_name,'',new.mid_name,...

In statement:
CREATE TRIGGER insert_trigger
BEFORE INSERT ON t_employees
FOR EACH ROW
SET new.fullname = CONCAT(new.first_name, '', new.mid_name, '', new.last_name);

这是一个可行的解决方案:

CREATE TEMPORARY TABLE t_employees (
    first_name TEXT,
    mid_name TEXT,
    last_name TEXT,
    fullname TEXT
);

CREATE OR REPLACE FUNCTION set_fullname()
    RETURNS TRIGGER AS $$
    BEGIN
        NEW.fullname = NEW.first_name || ' ' || NEW.mid_name || ' ' || NEW.last_name;
        RETURN NEW;
    END;
    $$ language 'plpgsql';


CREATE TRIGGER set_fullname_trigger
    BEFORE INSERT OR UPDATE ON t_employees
    FOR EACH ROW
    EXECUTE PROCEDURE set_fullname();


SET client_min_messages TO 'debug';
INSERT INTO t_employees VALUES ('fname1', 'mname1', 'lname1');
SELECT * FROM t_employees;
UPDATE t_employees SET first_name = 'updated-first-name';
SELECT * FROM t_employees;

好吧,我终于做到了。 根据您的建议和postgresql文档,我已经按照自己的意愿进行了触发。 语法如下:

创建函数:

 CREATE FUNCTION insert_funct() RETURN TRIGGER AS 
    $$
    BEGIN
      SELECT new.fullname := CONCAT(new.first_name, '', new.mid_name, '', new.last_name);
    END;
    $$
    LANGUAGE plpgsql;

然后创建触发器:

CREATE TRIGGER insert_trigger
  BEFORE INSERT ON t_employees
  FOR EACH ROW
EXECUTE PROCEDURE insert_funct();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM