代码之家  ›  专栏  ›  技术社区  ›  civesuas_sine

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

  •  0
  • civesuas_sine  · 技术社区  · 6 年前

    ID(number),name(varchar),value(number),GAME_NAME_ID(number), GNAME(varchar), RNUM(number).

    现在我要比较这个函数的第三行和其他一些参数。

    这是函数和输出

    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   
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   Kaushik Nayak    6 年前

    我不确定在纯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;
    /
    
        2
  •  0
  •   Ajay Venkata Raju    6 年前

    如果你的结果是这样的:

    '1,2,3,4,test,etc' 作为第1行
    ‘1、2、3、4、测试等’

    这就是使用regex通过逗号分割数据的方法 并提取第三个值 '[^,]+', 1, 3) '[^,]+', 1, 4)

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

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

    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;
    

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

    WITH test_data (raw_text)
     AS 
      (SELECT '{<ID=1,NAME=test4>,<ID=2,NAME=test3>,<ID=3,NAME=test5>,<ID=4,NAME=test1>,}' from dual
      )
    SELECT  
    regexp_substr(regexp_substr(regexp_substr(raw_text, '\{([^}]+)\}', 1,1,NULL,1), '\<([^>]+)\>', 1,3,NULL,1),'[^,]+', 1, 2)
    FROM test_data
    ;