如何使用EXECUTE关键字执行带参数的PL / SQL存储过程[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用EXECUTE关键字执行带参数的PL / SQL存储过程[关闭]相关的知识,希望对你有一定的参考价值。

以下示例创建一个存储过程,该过程查找两个数字之间的最小值并打印出最小值:

create or replace procedure findMin(x IN number, y IN number) IS
BEGIN
   IF x < y THEN
      dbms_output.put_line(x||' is the smallest number.');
   ELSE
      dbms_output.put_line(y||' is the smallest number.');
   END IF;
END; 

在匿名PL / SQL块内执行该过程不会产生任何问题:

begin
findMin(5,10);
end;

但是,匿名块之外的以下代码不起作用:

execute findMin(5,10);

当这些过程需要参数时,如何使用execute命令执行存储的PL / SQL过程?这甚至可能吗?

答案

不确定你的意思是“不工作” - 这是一个简短会话(在SQL * Plus中)的屏幕截图,以证明它工作得很好。

两个注意事项:execute是一个SQL * Plus命令,所以它不需要用分号终止(分号不应该伤害任何东西,但它只是不需要);并且,为了能够看到输出,您必须首先执行SQL * Plus命令set serveroutput on。如果“不起作用”只是意味着“我看不到输出”,那么也许你错过了这一步。 (它没有在我的插图中显示,因为我将我的系统设置为默认启用服务器输出。)

SQL> create or replace procedure findMin(x IN number, y IN number) IS
  2  BEGIN
  3     IF x < y THEN
  4        dbms_output.put_line(x||' is the smallest number.');
  5     ELSE
  6        dbms_output.put_line(y||' is the smallest number.');
  7     END IF;
  8  END;
  9  /

Procedure created.

Elapsed: 00:00:00.09
SQL> execute findMin(5, 10)
5 is the smallest number.

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL>

以上是关于如何使用EXECUTE关键字执行带参数的PL / SQL存储过程[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

oracle PL/SQL编程语言之游标的使用

oracle PL/SQL编程语言之游标的使用

如何在java中调用不带参数的PL/SQL函数

PL/SQL里 execute immediate的用法 谁给解释下

动态SQL和PL/SQL的EXECUTE选项分析

SQLAlchemy:execute() 得到了一个意外的关键字参数