在PostgreSQL中创建一个触发器函数

时间:2013-12-15 19:05:12

标签: postgresql triggers plpgsql

我正在创建一个必须填充名为“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:这是我第一次创建触发功能。

2 个答案:

答案 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';