【问题标题】:Returning record type返回记录类型
【发布时间】:2016-05-23 18:05:31
【问题描述】:

我需要声明记录类型,然后以某种方式返回它,以便我能够从我的 Java 应用程序中读取该记录。

假设我有桌子:

Player
------------
Player_id
First_Name
Second_Name
Team

然后我声明记录类型:

DECLARE
   type Player_type is record
      (First_Name  varchar(25),
      Second_Name  varchar(25),
      Team varchar(25));
BEGIN
     SELECT First_Name, Second_Name , Team INTO Player_type FROM Player;
END;

所以这就是我所能做的,但我需要做一个函数,将 Player_id 作为参数并返回记录类型,然后我需要从 Java 应用程序中读取这个记录类型。但我现在真的不知道该怎么办......

【问题讨论】:

    标签: function plsql


    【解决方案1】:

    这里的基本概念是您可以通过两种方式实现这一目标

    1) 通过使用复杂的对象类型 2) 通过使用 refcursor

    第一个从 JAVA 部分处理起来会有点复杂,代码如下所示。

    --CREATE schema level OBJECT type and NESTED table type to RETURN it in FUNCTION
    
    CREATE OR REPLACE TYPE player_type IS OBJECT
    (First_Name  varchar(25),
          Second_Name  varchar(25),
          Team varchar(25)
    )
    /
    CREATE OR REPLACE TYPE player_tab IS TABLE OF player_type
    /
    
    --FUNCTION Body
    
    CREATE OR REPLACE FUNCTION player_attribute
    (
    p_player_id IN NUMBER
    )
    RETURN player_tab
    AS
    ply_tb player_tab;
    BEGIN
    
        SELECT First_Name, 
        Second_Name , 
        Team 
        BULK COLLECT 
        INTO Ply_tb 
        FROM Player
    RETURN ply_tb;
    
    END;
    /
    

    而第二种方法会有点简单,只需将整个输出作为 refcursor 传递,如下所示。

    CREATE OR REPLACE FUNCTION player_attribute
    (
    p_player_id IN NUMBER
    )
    return sys_refcursor
    AS
    p_lst sys_refcursor;
    BEGIN
    Open p_lst FOR
        SELECT First_Name, 
        Second_Name , 
        Team 
        FROM Player
        WHERE player_id = p_player_id;
    
    RETURN p_lst; 
    
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 2021-08-15
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      相关资源
      最近更新 更多