You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Oracle SQL Developer中创建存储过程遇PLS-00103错误求助

解决PLS-00103: Encountered the symbol "CREATE"错误

PLS-00103错误是Oracle解析PL/SQL代码时无法识别语句结构导致的,针对你的情况,常见原因和解决方法如下:

常见原因及解决方案

  • 前序语句未正确结束
    如果执行存储过程前,有未用分号;结束或未执行完成的SQL语句,Oracle会把当前的CREATE语句当成前序语句的一部分,触发错误。解决:先执行或取消所有未完成的前序语句,再重新运行存储过程代码。

  • 分隔符使用不规范
    PL/SQL块需要用单独成行的/作为结束标记。你的代码末尾虽有/,但要确保它单独占一行,前后无多余空格、注释或其他字符,否则Oracle无法识别为块结束符。

  • 代码含隐藏特殊字符
    从非纯文本编辑器(如Word、网页)复制代码时,可能带入不可见的特殊字符(如智能引号、非标准换行符),干扰解析。解决:把代码粘贴到纯文本编辑器(如Notepad++)清除特殊字符后,再复制回SQL Developer。

  • 会话状态异常
    当前SQL工作表的会话状态异常也可能引发解析错误。解决:新建一个SQL工作表,粘贴代码后再执行。

格式合规的可执行代码

你的存储过程逻辑本身无问题,以下是确保格式正确的版本:

CREATE OR REPLACE PROCEDURE EnrollStudent(
     p_StudentID IN INT,  
    p_CourseID IN INT   
) IS

    v_student_skill INT;
    v_course_skill INT;
    v_enrolled_count INT;
    
BEGIN
    SELECT skill INTO v_student_skill
    FROM A1_Student
    WHERE StudentID = p_StudentID;

    SELECT skill INTO v_course_skill
    FROM A1_Course
    WHERE CourseID = p_CourseID;

    IF v_student_skill < v_course_skill THEN
        RAISE_APPLICATION_ERROR(-20001, 'Student skill level is not sufficient for this course.');
    END IF;

    SELECT COUNT(*) INTO v_enrolled_count
    FROM A1_Enrollment
    WHERE StudentID = p_StudentID AND CourseID = p_CourseID;

    IF v_enrolled_count > 0 THEN
        RAISE_APPLICATION_ERROR(-20002, 'Student is already enrolled in this course.');
    END IF;

    INSERT INTO A1_Enrollment (StudentID, CourseID)
    VALUES (p_StudentID, p_CourseID);

    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Student successfully enrolled in the course.');
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('Student or Course not found.');
    WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END EnrollStudent;
/

内容的提问来源于stack exchange,提问作者Namikaze Minato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:02:23