如果有人需要更多关于需要做什么程序或功能的信息,我很乐意解释它们。 这是我的包规范,其中我声明了函数和过程:
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;
我在包体中出错但我不知道出了什么问题。给我这个做的人也告诉我,这也可以使用游标完成,但我希望我能让这个工作。此致
答案 0 :(得分:0)
我无法重现该错误,但我确实看到了这个错误:
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.
...
答案 1 :(得分:0)
参数仅用作提供的值,您的要求将满足IN OUT模式参数。但建议不要在函数中使用out模式,因此最好使用除参数变量之外的其他变量。