http://i.stack.imgur.com/weX9W.jpg
在我表中的每个插入上,我都想基于要插入的对象的父代的代码生成此代码(1、1.1、1.2 ...)。
我的方法是这样的:-使一些SQL函数以某种方式生成此代码,并且将在表中的每个插入处通过触发器调用她。
字符串解析有些困难,那么您认为什么是最佳解决方案?谢谢。
您可以找到父对象,假设它的代码是1.3,然后计算同一个父对象的兄弟姐妹行,比如您发现了2个兄弟。因此,您的新代码值为1.3.3。但是此方法需要从触发器可以使用的同一表中进行选择。当您一次插入多行时,这可能会导致“ ORA-04091:表名正在更改,触发器/函数可能看不到它”。有一些变通办法可以避免这种情况。
另一种方法是使用基于此查询的视图,而不是触发器:
select id, pid, ltrim(sys_connect_by_path(rn, '.'),'.') code
from (
select id, pid,
row_number() over (partition by level, pid order by seq) rn
from data connect by pid = prior id
start with pid is null )
connect by pid = prior id
start with pid is null
它要求您的表包含seq
允许对行进行正确排序的列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句