我有一个包含以下各列的列表表
lists:
- id
- category_id
- name
- sort_order
在表中添加新行时,我想将排序顺序的值设置为最高排序顺序值+ 1,其中category_id与新行的category_id相同。有没有办法做到这一点?
更新 因此,在推荐创建插入触发器的过程中,我尝试了
CREATE FUNCTION set_list_sort_order()
RETURNS trigger AS $$
BEGIN
NEW.sort_order := select (select sort_order from lists where category_id = NEW.category_id order by sort_order DESC limit 1) + 1
RETURN NEW;
END
$$ LANGUAGE 'plpgsql';
CREATE TRIGGER set_list_sort_order_trigger
BEFORE INSERT ON lists
FOR EACH ROW
EXECUTE PROCEDURE set_list_sort_order()
但是我得到这个错误:
ERROR: syntax error at or near "select"
LINE 4: NEW.sort_order := select (select sort_order from lists w...
答案 0 :(得分:1)
您可以设置触发器。或者,您可以直接在x = Retriable.retriable do
some_function(1, 2)
end
中设置逻辑:
insert
请注意,这样的查询可能具有竞争条件。因此,您可能想要使用触发器。
答案 1 :(得分:0)
您可以尝试使用以下内容创建存储过程:
DEClARE @category_id INT = 1
;WITH NextNum AS
(
SELECT
CASE
WHEN MAX(Table1.sort_order) IS NULL THEN 1
ELSE MAX(Table1.sort_order) + 1
END AS NextValue
FROM Table1 AS Table1
WHERE Table1.category_id = @category_id
)
INSERT INTO Table1
(
id
category_id
name
sort_order
)
SELECT @id,
@category_id
@name
NextNum.NextValue
FROM NextNum