Oracle:第28行出错:PLS-00103:遇到符号“文件结束”

时间:2015-03-21 00:08:51

标签: oracle plsql

我有一个问题,我无法弄明白。它显示....

  

第28行出错:PLS-00103:遇到符号“文件结束”时   期待以下之一:

     

开始结束函数编译指示程序

     
      
  1. 创建或替换包裹身体check_emp_pkg
  2.   
  3. IS
  4.   
  5. 程序chk_hiredate
  6.   
  7. (p_date IN employees.hire_date%TYPE)
  8.   

这是我的代码:

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;

我不知道为什么我会收到错误!

1 个答案:

答案 0 :(得分:1)

您在第二个程序中有一个额外的begindeclare。这部分:

  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之后添加end if,但内部区块仍然无法添加任何有用的内容。