首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql在触发器函数中使用max函数

Postgresql在触发器函数中使用max函数
EN

Stack Overflow用户
提问于 2016-02-07 20:53:13
回答 2查看 493关注 0票数 1

--问题是:我有更多的公司,我想让每个公司的id_shutter从1开始自动递增(id_company和id_shutter是复合主键)

代码语言:javascript
复制
 CREATE FUNCTION insert_shutter() RETURNS TRIGGER AS $insert_shutter$
BEGIN
    IF exists(select 1 from shutter where id_company=new.id_company) then
    SELECT MAX(id_shutter) INTO new.id_shutter FROM shutter where id_company=new.id_company;
    new.id_shutter:=id_shutter+1;
    ELSE
    new.id_shutter=1;
    end if;
        RETURN NEW;

END;
$insert_shutter$ LANGUAGE plpgsql;

CREATE TRIGGER insert_shutter 
    BEFORE INSERT ON shutter
    FOR EACH ROW
    EXECUTE PROCEDURE insert_shutter();
EN

回答 2

Stack Overflow用户

发布于 2016-02-07 21:02:11

很抱歉我发现了,我不能使用: new.id_shutter:=id_shutter+1;我让SELECT MAX(id_shutter)+1到new.id_shutter从快门的地方id_company=new.id_company;

票数 1
EN

Stack Overflow用户

发布于 2016-02-07 20:56:37

有时这是必要的。但实际上,在表中添加一个serial列(让我们称之为ShutterId),然后在检索数据时进行计算要容易得多:

代码语言:javascript
复制
select s.*, row_number() over (partition by company order by id) as CompanyShutterSequence
from shutter s;

此外,将具有重复值的对象称为id也是一种误导。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35253722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档