Function 返回记录类型

Function 返回记录类型,function,plsql,Function,Plsql,我需要声明记录类型,然后以某种方式返回它,以便能够从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)); BE

我需要声明记录类型,然后以某种方式返回它,以便能够从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应用程序中读取这个记录类型。但是我真的不知道现在该怎么办…

这里的基本概念是你可以通过两种方式来实现这一点

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;
/

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

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;
/