我正在嘗試創建一個觸發器,將名稱和中間名縮短為首字母縮寫。這就是我所擁有的:
CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
DECLARE nm VARCHAR(50);
DECLARE mdnm VARCHAR(50);
BEGIN
nm = LEFT(NEW.name, 1);
mdnm = LEFT(NEW.middle_name, 1);
SET NEW.name = nm;
SET NEW.middle_name = mdnm;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER table_before_insert BEFORE INSERT OR UPDATE ON table1
FOR EACH ROW EXECUTE PROCEDURE myfunc();
但是由于某些原因它不起作用,它會是什么?
uj5u.com熱心網友回復:
如手冊中所述,變數用:=或分配=。但不是使用 SET 命令 - 它會更改配置屬性。您也不需要為每個變數使用單獨的 DECLARE 塊:
所以你的觸發器函式應該是這樣的:
CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
DECLARE
nm VARCHAR(50);
mdnm VARCHAR(50);
BEGIN
nm := LEFT(NEW.name, 1);
mdnm := LEFT(NEW.middle_name, 1);
NEW.name := nm;
NEW.middle_name := mdnm;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
你甚至不需要變數:
CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
BEGIN
NEW.name := LEFT(NEW.name, 1);
NEW.middle_name := LEFT(NEW.middle_name, 1);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/388205.html
標籤:PostgreSQL的 触发器
上一篇:EF或Npgsql中的常量表
