2013-11-03 4 views
1

누군가 내가 잘못하고있는 것을 지적 할 수 있습니까? 나는 다음과 같은 테이블을 기준으로 순위를 결정하는 절차를 만들려고 해요 :PL/SQL : SQL 문이 무시되었습니다 - 컴파일 오류가 발생하는 프로 시저 만들기

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;'에 의해'v_userid : = USERID;'. 또한'rank'는 예약어입니다. 그렇지 않으면 이름을 지정하는 것이 좋습니다. 또한, 저장 프로시 저는'return'을 사용하지 않습니다. 대신에'FUNCTION'을 생성해야합니다. – Sebas

답변

1

이 시도 : 여기

enter image description here

하면 코드

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 번호를 선언하고 처음에 userid로 설정 한 후 작동합니다. – BFF