所以我在Oracle 11g上创建了以下过程:
create or replace PROCEDURE calc_fee
(proc_borrowed_date IN Borrowing.borrowed_date%TYPE,
proc_return_date IN Borrowing.return_date%TYPE,
proc_fee OUT number)
IS
BEGIN
proc_fee := (SYSDATE - proc_return_date) * 2;
END calc_fee;
我该如何执行?我已经尝试了
EXEC CALC_FEE(SYSDATE - 10, SYSDATE);
和
EXECUTE CALC_FEE(SYSDATE - 10,SYSDATE);
但是他们都回复了我ORA-00900:无效的SQL语句
答案 0 :(得分:2)
您可以使用call
(而不是exec
)或PL / SQL代码块调用过程。另请注意,您有三个参数,因此您希望传递一个变量来捕获输出参数:
declare
V_FEE number;
begin
CALC_FEE(SYSDATE - 10, SYSDATE, V_FEE);
DBMS_OUTPUT.PUT_LINE(V_FEE);
end;
您可以创建一个返回值的函数,而不是带有out
参数的过程:
create or replace FUNCTION calc_fee
(proc_borrowed_date IN Borrowing.borrowed_date%TYPE,
proc_return_date IN Borrowing.return_date%TYPE) return number
IS
BEGIN
return (SYSDATE - proc_return_date) * 2;
END calc_fee;
这样的功能甚至可以用在查询中:
select CALC_FEE(SYSDATE - 10, SYSDATE) from dual
答案 1 :(得分:0)
您还需要传递输出参数,如下所示:
declare
pf number;
begin
calc_fee(sysdate, sysdate-10, pf);
dbms_output.put_line('pf is ' || pf);
end;
<强>参考强>:
Developing and Using Stored Procedures on Oracle® Database 2 Day Developer's Guide