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

返回最后5轮并将其传递到所选位置

  •  0
  • civesuas_sine  · 技术社区  · 7 年前
    create or replace function get_last_5_rounds(i_party_id in number)return sys_refcursor as
    重新设置系统引用光标;
    V诳round var诳round:=var诳round();
    
    开始
    选择圆形
    批量收集成V轮
    从(选择不同的会话ID,
    圆形
    从超级六号票
    其中party_id=i_party_id
    按会话排序描述
    )
    其中rownum<=5;
    打开重置设置
    选择rp.session_id,s.symbol_name_in_number ball_number,
    RP.位置,
    RP.附加符号
    从RP甲板RP,
    符号S
    会议地点:V轮成员
    和S.Game_name_id in 38
    和s.id=rp.card_name_id
    和s.client_id=1
    和RP位置<36
    按RP.位置订购;
    返回resault集合;
    结束最后一轮比赛;
    

    我有一个函数,它将返回球数,最后5轮的位置(P轮)。

    在第一次选择中,我得到5轮,但在第二次选择时,我也得到错误:

    select中应包含into子句

    我将如何通过从第一个select开始的所有回合,并用,(comma)将它们分开,以将它们包括在子句中?

    谢谢!

    编辑时间:

    现在我明白了:

    我需要将所有位置和球号分开,以获得唯一的训练ID。现在我将按位置排序。 我该怎么做?

    enter image description here

    我有一个函数,它将返回球数,最后5轮的位置(P轮)。

    在第一次选择中,我得到5轮,但在第二次选择中,我也得到错误:

    select中应包含into子句

    我如何通过所有的回合从第一选择和分开他们,(逗号)把它们包括在子句中?

    谢谢!

    编辑时间:

    现在我明白了:

    enter image description here

    我需要将所有位置和球号分开,以获得唯一的训练ID。现在我将按位置排序。 我该怎么做?

    1 回复  |  直到 7 年前
        1
  •  1
  •   XING    7 年前

    第二选择:

    loop 并填充变量,或者需要创建 collection bulk

    我将如何通过所有的回合,从第一选择和分离他们,

    你需要一个 nested

    CREATE TABLE super_six_tickets(session_id NUMBER,ROUND NUMBER);
    /
    CREATE TABLE  rp_deck (session_id NUMBER, position NUMBER,additional_symbol VARCHAR2(10));
    /
    CREATE TABLE symbols(symbol_name_in_number NUMBER);
    /
     --Create a type of number to hold the result of you first query.
    CREATE TYPE VAR_ROUND IS TABLE OF NUMBER;
    /
    

    CREATE OR REPLACE  FUNCTION get_last_5_rounds
        RETURN SYS_REFCURSOR
      AS
        resault_set SYS_REFCURSOR;
    
        --Initialization of varaible of nested table type 
        v_round VAR_ROUND:=VAR_ROUND();
    
    BEGIN
    
        SELECT round
        BULK COLLECT INTO v_round  --<--Fetching the rounds information in the variable
        FROM
          (SELECT DISTINCT session_id,
            ROUND
          FROM super_six_tickets
          ORDER BY session_id DESC
          )
        WHERE ROWNUM <= 5;
    
    --Opening Sys_refcursor to get the result.
        OPEN RESAULT_SET for   
        SELECT s.symbol_name_in_number ball_number,
               rp.position,
               rp.additional_symbol
        FROM rp_deck rp,
             symbols s
        WHERE rp.session_id MEMBER OF v_round --<-- checking In clause. 
        -- You can use this as well. However `MEMBER OF` clause is provided by Oracle to handle such situations.  
        --> rp.session_id in (Select column_value from table(v_round)) 
        ORDER BY rp.position ASC;
    
        RETURN RESAULT_SET;
    
      END get_last_5_rounds;