PL/SQL: SQL 语句被忽略 - 创建一个过程得到编译错误

Posted

技术标签:

【中文标题】PL/SQL: SQL 语句被忽略 - 创建一个过程得到编译错误【英文标题】:PL/SQL: SQL Statement ignored - Creating a Procedure getting compile errors 【发布时间】:2013-11-03 02:50:00 【问题描述】:

有人能指出我做错了什么吗?我正在尝试根据下表创建一个排名程序:

代码如下:

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

【问题讨论】:

尝试将v_userid := &USERID; 替换为v_userid := USERID;。此外,rank 是一个保留字,您可能更愿意使用其他名称。此外,存储过程不return 任何东西。您需要创建一个FUNCTION 【参考方案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;
/

【讨论】:

谢谢!它编译成功,但是当我尝试执行该函数时,我得到一个 PLS-00306: wrong number or types of arguments in call to 'F_RANK'。有什么建议吗? 谢谢,在声明 para_userid 号码并在开始时将其设置为 userid 后,它现在可以工作了 哦,很高兴你发现了!

以上是关于PL/SQL: SQL 语句被忽略 - 创建一个过程得到编译错误的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE:错误错误(6,3):PL/SQL:SQL 语句被忽略和错误(8,3):PL/SQL:ORA-00933:SQL 命令未在过程中正确结束

自定义 SQL 函数 - PL/SQL:语句被忽略

PL/SQL 语句被忽略且值不足

第 2 行的错误:PL/SQL:语句被忽略

PL/SQL:PLS-00382:表达式类型错误。语句被忽略

PLS-00382:表达式类型错误,PL/SQL:语句被忽略