执行过程Oracle 11g

时间:2014-06-13 23:07:51

标签: database oracle oracle11g procedure

所以我在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语句

2 个答案:

答案 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