2016-05-23 64 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; 
/