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。