基于特定记录集的Oracle循环序列

时间:2019-05-08 06:06:43

标签: sql oracle plsql sequence procedure

所以我有这些桌子

User table
NO| ID    | PID
1 | 00033 | P4
2 | 00033 | P3
3 | 00033 | P3

Program table 
NO | PROGRAM
1  | Prog-1
2  | Prog-2
3  | Prog-3
4  | Prog-4
5  | Prog-5

我希望得到这个结果

NO| ID    | PID | PROGRAM_NO
1 | 00033 | P4  | 1
2 | 00033 | P3  | 2
3 | 00033 | P3  | 3

对于下一批,应该根据程序表的行数对program_no进行计数

NO| ID    | PID | PROGRAM_NO
1 | 00033 | P4  | 4
2 | 00033 | P3  | 5
3 | 00033 | P3  | 1

逻辑是以循环方式将程序表上的随机排序program_no分配给用户表。并且需要在下一批中继续处理剩余的号码。

我想知道如何在oracle上实现这一目标。

关于, 瑞安

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,希望对您有用:

select no, program from(
select 1, p1.* from program p1 where no > 3  --3 is the last assigned program
union all
select 2, p2.* from program p2
order by 1, 2
fetch first 3 rows only
);

结果:

请注意,对于此解决方案,您应始终保存分配的最后一个程序ID。例如,您可以在单独的表中执行此操作,甚至可以在Program表中添加新列。