我有一个触发器,在插入每个Item(Parent Item)后插入一个自定义Sequence(Ref_No。)。 现在我有一个子项目,通过父项目ID链接到第一项(父项),它可以超过1。 我的父项触发器生成序列为“P2505”,我希望我的子项目序列应该是“P2505-1”,对于第二个子项目,它应该是“P2505-2”,依此类推。
每次插入新的父项时,子项的序列都应附加父项序列后跟1并进一步递增。
这是我生成父项序列的触发器
create or replace trigger REF_NO_TRIGGER before insert on LOST_ITEM for each row
DECLARE
PREFIX VARCHAR2(254);
BEGIN
SELECT NAME INTO PREFIX FROM SUBCAT WHERE SUBCAT.ID= :NEW.SUBCAT_ID;
:new.REF_NO := substr(PREFIX,1,1)||(:NEW.CATEGORY_ID)||(:NEW.SUBCAT_ID)||(:NEW.ID);
end;
根据我的理解,我需要检查Sub-Item表中的父项序列并查看是否有任何条目,如果没有条目,那么第一个子项应该是ParentItemSequence-1然后再次计数和追加“-2”,“ - 3”等等
我的子项目表是“子项目”,其中包含“序列”列。
需要帮助!!!
答案 0 :(得分:0)
以下是如何根据父项的ID生成子项的ID:
SELECT COALESCE( MAX( TO_NUMBER( REGEXP_SUBSTR(parent_id, '\d+$' ) ) ), 0 ) + 1
FROM subitem_table;
但是这里有一个困难,你不能在subitem表的INSERT或UPDATE触发器中执行此操作,因为......表正在变异。
另一个行动方案可能是使用序列/ IDENTITY列为每个子项生成ID。然后,您可以在子项目表上创建一个视图,以根据查询中的父ID生成ID:
SELECT id, parent_id, parent_id || '-' || ROW_NUMBER() OVER ( PARTITION BY parent_id ORDER BY id ) AS subitem_id
FROM subitem_table;
希望这有帮助。