Plsql 我收到此错误:PLS-00103:在预期以下情况之一时遇到符号“END”

Plsql 我收到此错误:PLS-00103:在预期以下情况之一时遇到符号“END”,plsql,Plsql,如果有人需要更多关于什么程序或功能需要做的信息,我很乐意向他们解释。 这是我的软件包规范,我在其中声明了函数和过程: create or replace PACKAGE SEMIR AS /* TODO enter package declarations (types, exceptions, methods etc) here */ PROCEDURE set_sal; FUNCTION emp_info(empno NUMBER) return VARCHAR2;

如果有人需要更多关于什么程序或功能需要做的信息,我很乐意向他们解释。 这是我的软件包规范,我在其中声明了函数和过程:

create or replace PACKAGE SEMIR AS 

  /* TODO enter package declarations (types, exceptions, methods etc) here */ 
  PROCEDURE set_sal;

  FUNCTION emp_info(empno NUMBER)
  return VARCHAR2;
END SEMIR;
和我的包体:

create or replace PACKAGE BODY SEMIR AS




  PROCEDURE set_sal AS
  v_manager_sal number;
  v_sal number;
  v_grade number;
  v_empno number;
  BEGIN

    SELECT sal INTO v_sal FROM EMP1;
    SELECT grade INTO v_grade FROM EMP1;
    UPDATE EMP1
    SET oldsal = v_sal;
      IF (v_sal<=3000) THEN
      SELECT MAX(sal) INTO v_sal FROM EMP1
      WHERE grade = grade;

      SELECT sal into v_manager_sal FROM EMP1 WHERE job ='MANAGER' AND
       empno = mgr;
        IF(v_sal-100>v_manager_sal)
        THEN
        UPDATE EMP1
        SET sal = sal-(sal-100-v_sal);
        END IF;
      END IF;
  END set_sal;



  FUNCTION emp_info(empno NUMBER)
  return VARCHAR2 AS
  v_mgr number;
  BEGIN
  SELECT mgr INTO v_mgr
  FROM EMP1;
    IF (v_mgr IS NOT NULL)
    THEN
    SELECT mgr INTO empno
    FROM EMP1
    WHERE empno=mgr;
      IF (mgr IS NOT NULL)
      THEN
      SELECT mgr INTO empno
      FROM EMP1
      WHERE empno = mgr;

        RETURN 'EMPLOYEE:'|| ename || ',' || job;
        ELSE
        RETURN job;
        END IF;
      END IF;
  END emp_info;


END SEMIR;

我得到的包体错误,但我不知道是什么问题。给我这个任务的人也告诉我,这也可以用游标来完成,但我希望我能让它工作起来。关于

我无法重现该错误,但我确实看到了该错误:

Error: PLS-00403: expression 'EMPNO' cannot be used as an INTO-target of a SELECT/FETCH statement
Line: 41
Text: SELECT mgr INTO empno
这是由于尝试将值指定给IN参数引起的。IN参数是通过引用传递的,不能修改

  ...
  FUNCTION emp_info(empno NUMBER)   --Defaults to an IN parameter.
  return VARCHAR2 AS
  v_mgr number;
  BEGIN
  SELECT mgr INTO v_mgr
  FROM EMP1;
    IF (v_mgr IS NOT NULL)
    THEN
    SELECT mgr INTO empno           --Trying to modify the IN parameter.
  ...

In参数仅用作提供的值,您的要求将满足In-OUT模式参数。但建议不要在函数中使用OUT模式,因此最好使用不同于In-parameter变量的变量

集合过程中只有一个IF,只有两个END IF。