我有一个函数,它返回游标并用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))与其他一些参数进行比较,还是仅比较特定的行列?
答案 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;