如何比较返回游标的函数中的行

时间:2018-09-19 13:40:28

标签: sql oracle plsql

我有一个函数,它返回游标并用ID(number),name(varchar),value(number),GAME_NAME_ID(number), GNAME(varchar), RNUM(number).返回4行

现在,我必须将此函数的第三行与其他参数进行比较。

这是功能和输出

select aff_setings.v$list_game_parameters_for_aff(4355,15,0,20) from dual;

Cursor (GAME_PARAMETAR_ID, NAME, VALUE, GAME_NAME_ID, GNAME, RNUM)              
------------------------------------------------------------------------
5, MAX_WIN, 100, 15, Royal , 1                                        
6, MAX_GAMBLE, 100, 15, Royal , 2                                     
8, MAX_BET, 50, 15, Royal , 3                                         
11, MIN_BET, 10, 15, Royal, 4   

我将如何比较第三行,仅将一个参数(例如VALUE(50))与其他一些参数进行比较,还是仅比较特定的行列?

2 个答案:

答案 0 :(得分:1)

我不确定是否有办法在不更改函数定义的情况下在纯SQL中执行此操作。 如果您使用TABLE函数而不是返回CURSOR,那么事情会更简单。

不过,这是在PL / SQL中可以做到的方式。

DECLARE
     v_game_parametar_id   INTEGER;
     v_name      VARCHAR2(20);
-- define all local variables to hold the cursor data
     v_cur             SYS_REFCURSOR := aff_setings.v$list_game_parameters_for_aff(4355,15,0,20); 
--load the cursor into a local refcursor
BEGIN
     LOOP
          FETCH v_cur INTO
               v_game_parametar_id,
               v_name;
               -- other variables
          EXIT WHEN v_cur%notfound;
          IF v_value = 50
          THEN
            do_the_comparision;
          END IF;
     END LOOP;
END;
/

答案 1 :(得分:1)

如果您的结果是这样的:

# Parallelize nested loops now=$(date +"%T") echo "Beginning STEP1.2: PARALLEL Demultiplex using barcodes. Current time : $now" >> outputLOG mkdir ROUND1_PARALLEL_HITS parallel -j 6 'grep -B 1 -A 2 -h {} SRR6750041_2_smalltest.fastq > ROUND1_PARALLEL_HITS/{#}_ROUND1_MATCH.fastq' ::: "${ROUND1_BARCODES[@]}" mkdir ROUND2_PARALLEL_HITS parallel -j 6 'grep -B 1 -A 2 -h {} ROUND1_PARALLEL_HITS/*.fastq > ROUND2_PARALLEL_HITS/{#}_{/.}.fastq' ::: "${ROUND2_BARCODES[@]}" mkdir ROUND3_PARALLEL_HITS parallel -j 6 'grep -B 1 -A 2 -h {} ROUND2_PARALLEL_HITS/*.fastq > ROUND3_PARALLEL_HITS/{#}_{/.}.fastq' ::: "${ROUND3_BARCODES[@]}" mkdir parallel_results parallel -j 6 'mv {} parallel_results/result_{#}.fastq' ::: ROUND3_PARALLEL_HITS/*.fastq 作为row1
'1,2,3,4,test,etc'作为第2行

然后您可以在下面的查询中使用

这是您可以使用正则表达式按逗号分割数据的方法,并提取第三个值'1,2,3,4,test,etc'(如果要使用第4个值,可以将其替换为'[^,]+', 1, 3) < / p>

'[^,]+', 1, 4)

这是将结果与其他值进行比较的方式:

 select REGEXP_SUBSTR(aff_setings.v$list_game_parameters_for_aff(4355,15,0,20), '[^,]+', 1, 3)  from dual;

如果您的结果作为一行光标返回,则可以通过以下方法提取所需的值:

在此示例中,id和name是两行,共有4行。如果要提取第三行第二列:

select 
case when 
(select REGEXP_SUBSTR(aff_setings.v$list_game_parameters_for_aff(4355,15,0,20), '[^,]+', 1, 3)  from dual)
=50 then 1 else 0 end
from dual;