因此,我在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);和
执行CALC_FEE(SYSDATE-10,SYSDATE);
但是它们都返回了me 00900:无效SQL语句。
发布于 2014-06-13 23:15:02
您可以使用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发布于 2014-06-13 23:24:15
您还需要传递输出参数,如下所示:
declare
pf number;
begin
calc_fee(sysdate, sysdate-10, pf);
dbms_output.put_line('pf is ' || pf);
end;参考
在Oracle数据库2开发人员指南上开发和使用存储过程
https://stackoverflow.com/questions/24214927
复制相似问题