Oracle:第28行错误:PLS-00103:遇到符号“;文件末尾”;

Oracle:第28行错误:PLS-00103:遇到符号“;文件末尾”;,oracle,plsql,Oracle,Plsql,我有个问题,我想不出来。它表明 第28行错误:PLS-00103:在 应满足以下条件之一: 开始结束函数pragma过程 创建或更换包体检查\u emp\u包装 是 程序chk_hiredate (员工中的p_日期。雇用日期%类型) 下面是我的代码: CREATE OR REPLACE PACKAGE BODY check_emp_pkg IS PROCEDURE chk_hiredate (p_date IN employees.hire_date%TYPE) IS

我有个问题,我想不出来。它表明

第28行错误:PLS-00103:在 应满足以下条件之一:

开始结束函数pragma过程

  • 创建或更换包体检查\u emp\u包装
  • 程序chk_hiredate
  • (员工中的p_日期。雇用日期%类型)
  • 下面是我的代码:

    CREATE OR REPLACE PACKAGE BODY check_emp_pkg 
    IS 
      PROCEDURE chk_hiredate 
        (p_date IN employees.hire_date%TYPE) 
        IS BEGIN 
          IF MONTHS_BETWEEN(SYSDATE, p_date) > g_max_length_of_service * 12 THEN 
            RAISE_APPLICATION_ERROR(-20200, 'Invalid Hiredate'); 
          END IF; 
      END chk_hiredate; 
      PROCEDURE chk_dept_mgr 
        (p_empid IN employees.employee_id%TYPE, 
        p_mgr IN employees.manager_id%TYPE) 
        IS BEGIN
          DECLARE
            v_mgr_id departments.manager_id%TYPE;
          BEGIN
           SELECT manager_id INTO v_mgr_id
           FROM departments;
           IF p_mgr = v_mgr_id THEN
             DBMS_OUTPUT.PUT_LINE('Success');
           ELSE
             RAISE_APPLICATION_ERROR(-20200, 'Manager ID is not a match');
           END IF;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          DBMS_OUTPUT.PUT_LINE('Manager does not exist');
      END chk_dept_mgr;
    END check_emp_pkg;
    

    我不知道我为什么会出错

    在第二个过程中,您有一个额外的
    begin
    declare
    。本部分:

      PROCEDURE chk_dept_mgr 
        (p_empid IN employees.employee_id%TYPE, 
        p_mgr IN employees.manager_id%TYPE) 
        IS BEGIN
          DECLARE
            v_mgr_id departments.manager_id%TYPE;
          BEGIN
           SELECT manager_id INTO v_mgr_id
           ...
    
    应该是:

      PROCEDURE chk_dept_mgr 
        (p_empid IN employees.employee_id%TYPE, 
        p_mgr IN employees.manager_id%TYPE) 
        IS
          v_mgr_id departments.manager_id%TYPE;
        BEGIN
         SELECT manager_id INTO v_mgr_id
         ...
    

    您可以从缩进中看到,您的块已失去对齐。当你真的不需要一个内部块时,你已经开始了一个内部块,并且没有正确地结束它。您可以在
    end if
    之后添加一个
    end
    ,但该内部块仍然不会添加任何有用的内容。

    我相信,只有当它是一个独立的过程时,才需要该过程下的IS。另外,您已经运行了包规范,对吗?是的,包规范已经运行并创建。根据我所见,手术正在进行中。我已经在谷歌上搜索过了,它已经被打包在那里了。IDK,错误在哪里。谢谢你的帮助