http://i.stack.imgur.com/weX9W.jpg
在我的表中的每个插入,我想基于我插入的对象的父代码生成此代码(1,1.1,1.2 ......)。
我的方法是这样的: - 创建一些将以某种方式生成此代码的SQL函数,并且将通过触发器在我的表中的每个插入中调用它。
在字符串解析方面遇到了一些困难,那么您认为这将是最佳解决方案?感谢。
答案 0 :(得分:0)
你可以找到父对象,让我们说它的代码是1.3然后用相同的父对象计算兄弟姐妹行,假设你找到了2个兄弟。 所以你的新代码值是1.3.3。但是这种方法需要从触发器工作的同一个表中进行选择。 当你在时间插入几行时,这可能会导致“ORA-04091:表名发生变异,触发器/函数可能看不到它”。 有workarounds可以避免这种情况。
另一种方法是使用基于此查询的视图,而不是触发器:
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
,允许正确排序行。