Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 执行过程Oracle 11g_Database_Oracle_Oracle11g_Procedure - Fatal编程技术网

Database 执行过程Oracle 11g

Database 执行过程Oracle 11g,database,oracle,oracle11g,procedure,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_fe

因此,我在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);

执行计算费用(系统日期-10,系统日期)


但是它们都返回我ORA-00900:invalid SQL statement

您可以使用
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

您还需要传递输出参数,如下所示:

declare
  pf number;
begin
  calc_fee(sysdate, sysdate-10, pf);
  dbms_output.put_line('pf is ' || pf);
end;
参考