我正在创建一个必须填充名为“numero_cip”字段的触发器函数。该字段必须在“INSERT ROW”之后填充一次,因为该字段是来自以下的连接:“BR”+ ID FIELD + SUFIXO FIELD。
所以,我正在尝试创建这个触发器功能:
CREATE OR REPLACE FUNCTION numeradora_cip()
RETURNS trigger AS $$
DECLARE
sufixo varchar(2);
numero_cip varchar(60);
BEGIN
sufixo := select p.sufixo from produto p where p.id = NEW.id_produto;
NEW.numero_cip = select 'BR' || lpad(NEW.id, 11, '0') || sufixo;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
但是我得到了错误:
ERROR: syntax error at or near "select"
LINE 7: sufixo := select p.sufixo from produto p where p.id = NE...
PS:这是我第一次创建触发功能。
答案 0 :(得分:1)
来自fine manual:
<强> 40.5.3。使用单行结果执行查询
可以将产生单行(可能是多列)的SQL命令的结果分配给记录变量,行类型变量或标量变量列表。这是通过编写基本SQL命令并添加
INTO
子句来完成的。例如,
SELECT select_expressions INTO [STRICT] target FROM ...;
...
所以你在寻找:
select p.sufixo into sufixo from produto p where p.id = NEW.id_produto;
然后,既然你的PL / pgSQL,你可以做一个简单的字符串连接来获取你的numero_cip
:
NEW.numero_cip := 'BR' || lpad(NEW.id, 11, '0') || sufixo
答案 1 :(得分:0)
CREATE OR REPLACE FUNCTION numeradora_cip()
RETURNS trigger AS $$
DECLARE
sufixo varchar(2);
numero_cip varchar(60);
BEGIN
select p.sufixo into sufixo from produto p where p.id = NEW.id_produto;
NEW.numero_cip := select 'BR' || lpad(NEW.id, 11, '0') || sufixo;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';