簡體   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