【发布时间】:2015-10-18 20:33:02
【问题描述】:
我已经创建了以下包和包体:
CREATE OR REPLACE PACKAGE interest_calculation IS
interest_rate number(2,3) := 0.5;
FUNCTION interests (ID IN char)
RETURN number;
END interest_calculation;
/
CREATE OR REPLACE PACKAGE BODY interest_calculation
IS
FUNCTION interests
(ID IN char)
RETURN number
IS
CURSOR ecursor IS
SELECT l.borrower_id, l.shiffer, l.date, l.return_date, r.price
FROM loans l, books r
WHERE l.shiffer=r.shiffer AND borrower_id = ID;
kirje ecursor%ROWTYPE;
summed number(4,2) := 0;
interest number(4,2);
period integer;
BEGIN
FOR kirje IN ecursor LOOP
period := kirje.return_date - kirje.date;
IF period < 15 THEN
interest := 0;
ELSE
interest := (period - 14) * kirje.price * (interest_rate/100) ;
END IF;
summed := summed + interest;
END LOOP;
RETURN summed;
END;
END interest_calculation;
/
当我调用包函数时:
execute interest_calculation.interests('37904010329');
我得到一个错误:
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'INTERESTS' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
为什么不返回函数值?我是否必须在包头中添加一个过程才能返回函数值?
非常感谢您提供的任何帮助。
【问题讨论】:
-
错误信息很清楚:
INTERESTS' is not a procedure。这是一个函数。您不能使用execute调用函数。试试:SELECT interest_calculation.interests('37904010329') FROM dual或DECLARE x NUMBER; BEGIN x:=interest_calculation.interests('37904010329'); DBMS_OUTPUT.PUT_LINE( x ); END; -
这丢失了错误但它返回了空值,尽管我之前单独测试了该函数并且应该返回一个实数。我错过了一些东西。
标签: function plsql package return-value