【发布时间】:2021-05-12 05:32:01
【问题描述】:
每当 v_id 的值不同时,我想将 i 加 1。
i = 1;
for i in 1..10 loop
SELECT subject_details.NEXTVAL
INTO v_id
FROM dual;
INSERT INTO employee (id, subject)
VALUES (i,v_id);
i = i + 1;
end loop;
这是做什么的
id subject
1 3647
2 3647
3 5678
4 5678
5 5678
但我想要的是每当“v_id”的值发生变化时将“i”的值增加 1
id subject
1 3647
1 3647
2 5678
2 5678
2 5678
【问题讨论】:
-
那么
i = v_id - 999? -
这里的 v_id 值只是一个例子。也可以是 74685 或 36495
-
我很想知道调用 sequence.nextval 如何在连续迭代中返回相同的值
-
离题:为什么是
SELECT subject_details.NEXTVAL INTO v_id FROM dual;而不是v_id := subject_details.nextval? -
我会放弃循环并考虑采用 Gordon 的 dense_rank 想法并在
insert into .... select ...语句中使用它。您可能还在循环游标,这会很慢。当您可以进行基于集合的处理(例如单个 SQL 语句)时,不要进行逐行处理(例如循环游标)
标签: sql oracle for-loop plsql increment