2016-05-23 210 views
0

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

回答

2

这里的基本概念是,你可以通过两种方式

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