Oracle Pl/sql从多个查询中返回一个游标

Udi*_*dan 1 sql oracle plsql

我有一个存储过程,它返回一个游标.

应用程序将一个参数传递给过程,该过程确定应该获取多少ID,因此该过程不知道该数字的时间序列.

foreach ID我需要获取具有该ID的前3个记录.我试过的是使用:

select * from table_name where id in (List of ID`s);
Run Code Online (Sandbox Code Playgroud)

该查询有效,但我无法获得每个ID的前3个.如果我限制结果计数,我将得到第一个ID的TOP结果.

我想使用For循环,为每个ID执行查询并将结果附加到光标,但据我所知,这是不可能的.

有任何想法吗 ?

更多细节 假设我有5个ID,s and each of them have inner Id所以Id 1有(1,2,3,4,5)Id 2(1,2,3,4,5)Id 3(12,14,15,16,22) Id 4(2,3,5,7,9)Id 5(4,7,8,9,10)在这种情况下,我正在处理的情况,我不知道行号将如何帮助我.我需要每个ID的前3个,在这种情况下,光标应该有15个结果.

10倍多,周末愉快;)

APC*_*APC 5

据推测,你有一些确定前三名的标准?

无论如何,实现这一目标的方法是使用分析功能.Oracle提供三种不同的功能:ROW_NUMBER(),RANK()和DENSE_RANK().这些对TOP 3提供了三种略有不同的解释. 了解更多信息.

这是基本的想法,使用ROW_NUMBER(),它将为每个ID返回三行.

open rc for 
    select * from (
        select t.*
               , row_number() over (partition by id order by whatever ) rn 
        from table_name t 
        where t.id in (List of ID`s)
     )
     where rn <= 3;
Run Code Online (Sandbox Code Playgroud)

whatever该ROW_NUMBER()子句中的是你用它来确定TOP岬列.