在 pl/sql 中创建过程时出现错误

Posted

技术标签:

【中文标题】在 pl/sql 中创建过程时出现错误【英文标题】:I'm getting error while creating a procedure in pl/sql 【发布时间】:2020-09-21 10:16:03 【问题描述】:

我的代码

CREATE OR REPLACE proc_grade IS
    v varchar2(20);
    c varchar2(20);
    t integer(10);
    x integer(10);
   
CURSOR s IS
    SELECT total_marks,name,roll_no FROM STUD_MARKS ORDER BY roll_no;
BEGIN
    OPEN s;
        LOOP
            FETCH s INTO x,c,t;
                BEGIN
                    v:=grade(x);
                    INSERT INTO result VALUES(t,c,v);
                    dbms_output.put_line('ROLL_NO : '||t||'NAME: '||c||' CLASS: '||v);
                END;
           EXIT WHEN s%notfound;
        END LOOP;
   CLOSE s;
END;

我得到的错误如下:

ORA-00922:缺少或无效选项

ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200100”,第 581 行

ORA-06512:在“SYS.DBMS_SYS_SQL”,第 1658 行

ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200100”,第 567 行

ORA-06512:在“APEX_200100.WWV_FLOW_DYNAMIC_EXEC”,第 2127 行

    c varchar2(20);

    t 整数(10);

    x 整数(10);

    CURSOR 是

【问题讨论】:

【参考方案1】:

不是

CREATE OR REPLACE           proc_grade

但是

CREATE OR REPLACE PROCEDURE proc_grade

顺便说一句,你可以通过只运行这个而不是你编写的所有 PL/SQL 来更简单地完成它。

INSERT INTO result
   SELECT roll_no, name, grade (total_marks) 
   FROM stud_marks;

【讨论】:

以上是关于在 pl/sql 中创建过程时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

过程创建时出现编译错误 PL/SQL: ORA-00947: not enough values

使用存储过程执行 PL/SQL 代码时出现问题

警告:在 plsql 中创建包体时出现编译错误...

为啥我们要编写 create/replace 来在 PL/SQL 中创建过程

在存储过程中创建动态表而在 PL/SQL 块表中创建时权限不足[重复]

编译过程时出现oracle错误