Sql 将行李升级到列表的存储过程

Sql 将行李升级到列表的存储过程,sql,hibernate,stored-procedures,postgresql-9.1,plpgsql,Sql,Hibernate,Stored Procedures,Postgresql 9.1,Plpgsql,我最近刚刚将一些hibernate映射类的语义更改为列表。添加列表索引列本身很简单,但以合理的方式填充它似乎不那么简单。最后,我编写了以下存储过程(PL/pgsql),其工作原理是循环遍历由引用列排序的表的所有行,并将索引设置为0、1、2、3等,直到找到新的引用号。它解决了问题,但我想知道是否有更简单的方法来达到同样的效果 CREATE或REPLACE函数setlistorderfunc(VARCHAR,VARCHAR)返回VOID作为$$ 声明 当前索引整数:=0; 当前资源整数:=0; r记

我最近刚刚将一些hibernate映射类的语义更改为列表。添加列表索引列本身很简单,但以合理的方式填充它似乎不那么简单。最后,我编写了以下存储过程(PL/pgsql),其工作原理是循环遍历由引用列排序的表的所有行,并将索引设置为0、1、2、3等,直到找到新的引用号。它解决了问题,但我想知道是否有更简单的方法来达到同样的效果

CREATE或REPLACE函数setlistorderfunc(VARCHAR,VARCHAR)返回VOID作为$$
声明
当前索引整数:=0;
当前资源整数:=0;
r记录;
开始
对于r,在执行“选择id”、“2 | | | |”res、资源列表|从“| |$1 | |”order BY res ASC、rlo ASC”循环中对rlo进行排序
如果是资源!=r、 那么
currResource:=r.res;
指标:=0;
其他的
currIndex:=currIndex+1;
如果结束;
执行'UPDATE'| |$1 | |'set resource_list_order='| | currendex | |'WHERE id='| | r.id;
端环;
结束;
$$语言plpgsql;
要升级资源上的
评级
s包(通过名为
关于_resource
的列链接),我需要执行以下操作:

  SELECT setlistorderfunc('rating', 'about_resource');
在子查询中使用,并连接到中的结果,以大大简化此操作:

UPDATE rating r
SET    resource_list_order = sub.rn
FROM  (
    SELECT id, row_number() OVER (PARTITION BY about_resource
                                  ORDER BY resource_list_order) - 1 AS rn
    FROM   rating
    ) sub
WHERE  r.id = sub.id;