2017-08-17 105 views
0

創建一個名爲'display_player_skill'的函數,該函數接受輸入參數。輸入參數是'player_id',數字爲數據類型。此函數應返回給定'player_id'的skil_id。Pl/SQL將字符串賦值給一個變量並且每次都打印該值

我曾試圖

create or replace function display_player_skill (player_id in number) 
    return varchar2 
is 
    skill_name varchar2(100); 
begin 
    select s.name into skill_name from k_skill s 
    inner join k_player p on p.skill_id=s.id 
    where p.skill_id= player_id; 

    case skill_name 
     when 'Raider' then return 'Player is a Raider'; 
     when 'All rounder' then return 'Player is a All Rounder'; 
    end case; 

exception 
    when case_not_found then return 'Player is a Defender'; 
    when no_data_found then return 'No Such Player'; 
end; 
/

,但我不得不返回skill_id也對給定player_id和顯示skill_name。通過將字符串分配給一個變量並每次打印該值。

+0

你在哪裏調用此函數,在SQL語句或PL/SQL塊? – Himanshujaggi

+0

您顯示的賦值語句沒有提及顯示名稱的任何內容? –

+0

當然,這應該是「玩家是一個全能者」嗎? –

回答

0

似乎where子句不正確(比較skill_id和player_id是很奇怪的)。

where p.skill_id= player_id; 

此外,如果你在k_player有列player_id,甲骨文將把player_id作爲列名。所以,你需要命名參數類似p_player_id(P_的參數)

所以我希望你的代碼看起來是這樣的:

create or replace function display_player_skill (p_player_id in number) 
    return varchar2 
    is 
    skill_name varchar2(100); 
    skill_id number; 
    BEGIN 
    select s.name, s.id into skill_name, skill_id from k_skill s 
    inner join k_player p on p.skill_id=s.id 
    where p.player_id= p_player_id; 

    dbms_output.put_line('Skill name is a '||skill_name); 

    return skill_id; 

EXCEPTION 
when no_data_found then return 'No Such Player'; 
END; 
/

我不知道你的表結構,使一些列名可能需要更正。

+1

你有一個錯字,一個額外的「入」,而不是在選擇逗號。 –

+0

謝謝。我修好了它。 –

0

嘗試:

select s.name, s.id into skill_name,skill_id from k_skill s 
     inner join k_player p on p.skill_id=s.id 
     where p.player_id= p_player_id; 

    --  dbms_output.put_line('Skill name is a '||skill_name); 

     return skill_id;