CREATE OR REPLACE FUNCTION numpass
    (level char)
    return number
   as
num_pass number
begin
     if level="优" then
     select count(*) into num_pass from grade where grade>='90';
     elseif level="良" then
     select count(*) into num_pass from grade where grade>='75";
     elseif level="及格" then
     select count(*) into num_pass from grade where grade>='60";
     elseif level="不及格" then
     select count(*) into num_pass from grade where grade<'60';
     end if;
    return num_pass;
   end;警告: 创建的函数带有编译错误。
用show error后提示SQL> show error
FUNCTION NUMPASS 出现错误:LINE/COL ERROR
-------- -----------------------------------------------------------------
6/1      PLS-00103: 出现符号 "BEGIN"在需要下列之一时:
         := . ( @ % ; not null
         range default character有谁能帮忙下嘛谢谢

解决方案 »

  1.   

    有很多的基本语法错误,如elseif就为ELSEIF,再有数字不用加单引号。
    具体代码请参考:CREATE OR REPLACE FUNCTION numpass(level CHAR)
    RETURN NUMBER
    AS
        num_pass NUMBER;
    BEGIN
        IF level="优" THEN
            SELECT COUNT(*) INTO num_pass FROM grade WHERE grade>= 90;
        ELSIF level="良" THEN
            SELECT COUNT(*) INTO num_pass FROM grade WHERE grade>= 75;
        ELSIF level="及格" THEN
            SELECT COUNT(*) INTO num_pass FROM grade WHERE grade>= 60;
        ELSIF level="不及格" THEN
            SELECT COUNT(*) INTO num_pass FROM grade WHERE grade < 60;
        END IF;
        RETURN num_pass;
    END;