首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行过程Oracle 11g

执行过程Oracle 11g
EN

Stack Overflow用户
提问于 2014-06-13 23:07:51
回答 2查看 437关注 0票数 1

因此,我在Oracle 11g上创建了以下过程:

代码语言:javascript
复制
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;​

我该如何执行呢?我已经试过了

代码语言:javascript
复制
EXEC CALC_FEE(SYSDATE - 10, SYSDATE);

执行CALC_FEE(SYSDATE-10,SYSDATE);

但是它们都返回了me 00900:无效SQL语句。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-13 23:15:02

您可以使用call (而不是exec)或PL/SQL代码块调用过程。还请注意,您有三个参数,因此您需要传递一个变量来捕获输出参数:

代码语言:javascript
复制
declare
  V_FEE number;
begin
  CALC_FEE(SYSDATE - 10, SYSDATE, V_FEE);
  DBMS_OUTPUT.PUT_LINE(V_FEE);
end;

与带有out参数的过程不同,您还可以创建一个返回值的函数:

代码语言:javascript
复制
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;

这样的函数甚至可以用于查询:

代码语言:javascript
复制
select CALC_FEE(SYSDATE - 10, SYSDATE) from dual
票数 2
EN

Stack Overflow用户

发布于 2014-06-13 23:24:15

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

代码语言:javascript
复制
declare
  pf number;
begin
  calc_fee(sysdate, sysdate-10, pf);
  dbms_output.put_line('pf is ' || pf);
end;

参考

在Oracle数据库2开发人员指南上开发和使用存储过程

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24214927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档