首页 文章

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

提问于
浏览
-1

我有一个问题,我无法弄明白 . 表明....

第28行出错:PLS-00103:遇到以下其中一项时遇到符号“文件结束”:begin end function pragma procedure CREATE OR REPLACE PACKAGE BODY check_emp_pkg IS PROCEDURE chk_hiredate(p_date IN employees.hire_date%TYPE)

这是我的代码如下:

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 回答

  • 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 if 之后添加 end ,但该内部块仍然不会添加任何有用的内容 .

相关问题