2013-11-03 71 views
1

有人可以指出我做錯了什麼嗎?我試圖創建一個基於以下各表的排序方法:PL/SQL:SQL語句被忽略 - 創建一個獲取編譯錯誤的過程

enter image description here

下面是代碼:

create or replace procedure rank 
(para_userid IN number, USERID IN number) 
is 
    rank number; 
    v_userid number; 
begin 
    v_userid := &USERID; 
    select v_userid, sum(decode(a.rank, 'SU', 25, 'EX', 9, 'VG', 5, 'G', 3, 'F',1) * b.tokens)/sum(b.tokens) 
into rank 
from a.GameID = b.GameID 
where para_userid = v_userid; 
return rank; 
end; 



declare 
x number; 
begin 
x:=rank(&USERID); 
DBMS_OUTPUT.PUT_LINE('User Ranking is: '||x); 
end; 
/
+0

嘗試更換'v_userid: =&USERID;'by'v_userid:= USERID;'。另外,「rank」是一個保留字,您可能更喜歡以其他方式命名。另外,存儲過程不會「返回」任何東西。您需要改爲創建一個'FUNCTION'。 – Sebas

回答

1

試試這個:

CREATE OR REPLACE FUNCTION f_rank (USERID IN number) RETURN NUMBER DETERMINISTIC IS 
    nRank number; 
BEGIN 
    SELECT SUM(DECODE(a.rank, 'SU', 25, 'EX', 9, 'VG', 5, 'G', 3, 'F',1) * b.tokens)/SUM(b.tokens) 
    INTO nRank 
    FROM a JOIN b ON a.GameID = b.GameID 
    WHERE 
     para_userid = USERID; 
    RETURN nRank; 
END f_rank; 



DECLARE 
    x number; 
BEGIN 
    x := f_rank(&USERID); 
    DBMS_OUTPUT.PUT_LINE('User Ranking is: '||x); 
END; 
/
+0

謝謝!它編譯成功,但是我得到一個PLS-00306:當我試圖執行該函數時,在調用'F_RANK'時錯誤的數量或類型的參數。有什麼建議麼? – BFF

+0

是的,現在試用 – Sebas

+0

謝謝,現在它宣佈para_userid號碼並將其設置爲開頭 – BFF