所以我有一些像这样的数据
NO| ID | PID | COUNT
1 | 00033 | P4 | 1
2 | 00033 | P3 | 3
3 | 00033 | P2 | 2
我想像这样基于计数值迭代ID和PID
NO| ID | PID
1 | 00033 | P4
2 | 00033 | P3
3 | 00033 | P3
4 | 00033 | P3
5 | 00033 | P2
6 | 00033 | P2
如何使用Oracle PL / SQL过程/游标实现此目标的最佳方法。
关于, 瑞安
答案 0 :(得分:1)
使用普通SQL:
SELECT row_number() OVER ( ORDER BY t."ID", t."PID" DESC ) as NO,
t."ID", t."PID"
FROM Table1 t
CROSS APPLY(
SELECT 1 FROM dual
CONNECT BY level <= t."COUNT"
)
ORDER BY t."ID", t."PID" DESC
演示:https://dbfiddle.uk/?rdbms=oracle_18&fiddle=d0840879efd2ef4dbc9caef4d1ff6a50
答案 1 :(得分:0)
在以下过程中使用CURSOR FOR LOOP和嵌套的FOR循环的解决方案:
表格
create table nipc ( no, id, pid, count )
as
select 1 , '00033' , 'P4' , 1 from dual union all
select 2 , '00033' , 'P3' , 3 from dual union all
select 3 , '00033' , 'P2' , 2 from dual ;
过程
create or replace procedure nloops
is
begin
for r in ( select no, id, pid, count from nipc )
loop
for iter in 1 .. r.count
loop
dbms_output.put_line( r.no || ' | ' || r.id || ' | ' || r.pid ) ;
end loop ;
end loop ;
end ;
/
使用匿名阻止进行测试
SQL> set serveroutput on
SQL> begin
2 nloops ;
3 end;
4 /
1 | 00033 | P4
2 | 00033 | P3
2 | 00033 | P3
2 | 00033 | P3
3 | 00033 | P2
3 | 00033 | P2
PL/SQL procedure successfully completed.
您知道在编写任何PL / SQL代码之前(例如,请参阅@krokodilko的答案),您应该“尽可能使用SQL”。