Plsql 从上次选择时的先前参考开始
基于select查询插入时出现问题 我在数据库中有一个具有父子关系的模式,如下所示Plsql 从上次选择时的先前参考开始,plsql,Plsql,基于select查询插入时出现问题 我在数据库中有一个具有父子关系的模式,如下所示 A B C G L F C G L 注意元素c是如何重用的,因为它可以使用不同的父id保存两次,但是元素g只能保存一次,因为c的id在两种情况下都是相同的。select按预期使用以下查询打印所有内容 select id, parent_id, label from table start with parent_id is null c
A
B
C
G
L
F
C
G
L
注意元素c是如何重用的,因为它可以使用不同的父id保存两次,但是元素g只能保存一次,因为c的id在两种情况下都是相同的。select按预期使用以下查询打印所有内容
select id,
parent_id,
label
from table
start with parent_id is null
connect by nocycle prior id = parent_id
order siblings by sort
我在这个表中有大约2500个元素,但最终显示了大约4000个元素,因为一些元素应该在不同的位置多次显示
因此,为了将第一个和第二个g都标识为唯一元素,我编写了以下insert语句
insert into other_tale (id, parent_id, label)
select create_id new_id,
prior ???,
label,
from table
start with parent_id is null
connect by nocycle prior id = parent_id
order siblings by sort;
insert into other_tale (id, parent_id, label)
select my_package.f_generate_id(id),
my_package.f_generate_id(parent_id),
label
...
在这里,我调用一个过程来为找到的每个raw生成一个新id。现在我被困在接收父元素的新id的部分。我知道我可以在being select表中引用先前的父元素,但我是否能够以某种方式引用select中父元素的new\u id列?创建一个包含1个关联数组
id\u cache
和2个函数的包:f\u clear\u cache
和f\u generate\u id
f\u clear\u cache
删除缓存的id-id\u cache.delete
f_generate_id
将id作为参数并返回新的_id
id\u缓存存在(id)
id\u缓存(id):=new\u id
返回id\u缓存(id)
insert into other_tale (id, parent_id, label)
select create_id new_id,
prior ???,
label,
from table
start with parent_id is null
connect by nocycle prior id = parent_id
order siblings by sort;
insert into other_tale (id, parent_id, label)
select my_package.f_generate_id(id),
my_package.f_generate_id(parent_id),
label
...
注意:如果要在同一会话中生成新的ID集,请不要忘记调用f\u clear\u cache