[英]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.