【发布时间】:2018-05-09 13:38:45
【问题描述】:
所以我有一个 FORALL 大容量集合,用于将值插入到表中。
通常我会为必须填充的序列字段使用循环。例子是这样的............
seqno = seqno +1
.....然后我会循环遍历每条记录,因为它们会在插入时增加 1。
SELECT bis_part, bis_part_org, bis_store, bis_bin, bis_lot, bis_qty
BULK COLLECT INTO V_STTK_CLTN
FROM table1
WHERE bis_bin = 'DIRECT'
AND bis_store = p_org;
FORALL INDX IN 1 .. V_STTK_CLTN.COUNT
INSERT INTO table2
(stl_part,
stl_part_org,
stl_trans,
stl_store,
stl_bin,
stl_lot,
stl_expqty,
stl_phyqty,
stl_rtype,
stl_type,
stl_line )
VALUES
(V_STTK_CLTN(INDX).bis_part,
V_STTK_CLTN(INDX).bis_part_org,
ctrans,
V_STTK_CLTN(INDX).bis_store,
V_STTK_CLTN(INDX).bis_bin,
V_STTK_CLTN(INDX).bis_lot,
V_STTK_CLTN(INDX).bis_qty,
'',
'STTK',
'STTK',
seqno);
既然我使用的是没有循环的 FORALL,我怎么能对集合执行此操作?
seqno 值是我需要序列的地方。每次运行时,它都会将这些记录插入到同一个表中,但序列每次都必须从一个开始,因为它是集合而不是整个表的序列......有意义吗?
【问题讨论】:
-
创建一个序列并使用它。 SEQ_X.nexval? docs.oracle.com/cd/B28359_01/server.111/b28286/…
-
seqno列是您从中驱动 FORALL 语句的集合的属性吗?更实际的代码会让我们更清楚您的场景。 -
在要插入的表上使用序列,还是在 12c 以后使用 IDENTITY 列? (以便接收表负责创建/管理您的顺序值。)
-
您好,感谢大家的帮助......我添加了一些代码来向您展示我正在使用的内容。我正在使用一个循环,只是循环遍历记录,但我现在必须使用 FORALL 插入......不允许循环。这甚至可能吗?我想用 ROWNUM 代替变量 seqno 但我得到这个错误.....ORA-00976: Specified pseudocolumn or operator not allowed here.
-
检查我的答案并接受它有帮助的答案。另请阅读:stackoverflow.com/help/someone-answers
标签: sql oracle plsql bulk-collect