存储过程是一种SPL程序,可以做为一个单独的SPL应用来调用。当调用存储过程时,它可以用输入参数的形式从调用者接收数值, 并且可以用输出参数的方式向调用者返回最终执行结果。

创建存储过程

CREATE PROCEDURE 命令用于定义和命名要存储在数据库中的存储过程。
CREATE [ OR REPLACE ] PROCEDURE name [ (parameters) ] [ AUTHID { DEFINER | CURRENT_USER } ] { IS | AS }
[ declarations ] BEGIN
statements END [ name ];                

name 是存储过程的标识符, 如果定义了[ OR REPLACE ] 并且在模式中已经存在了有相同名字的存储过程,那么新创建的存储过程将替代已存在的存储过程。反之,新创建的存储过程将无法替代在同一模式下已存在的存储过程。parameters是一个正式参数的列表。如果没有使用AUTHID子句或者定义了DEFINER子句,就会使用存储过程所有者的权限和搜索路径分别来确定数据库对象的访问优先级, 解析对未限定数据库对象的引用。如果指定了CURRENT_USER子句,那么就会使用当前执行存储过程的用户的权限和搜索路径,来确定访问的优先级和解析未限定数据库对象的引用。declarations是变量,游标或者类型的声明。statements是SPL应用程序所使用的语句。BEGINEND块包含一个捕获异常的部分。

下面是一个简单的存储过程,它不带有任何参数。
CREATE OR REPLACE PROCEDURE simple_procedure
IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('That''s all folks!');
END simple_procedure;

通过在POLARDB for Oracle中编写代码,我们把这个存储过程存放到了数据库中。

调用存储过程

通过指定存储过程的名称,及其后面的参数,最后加上一个分号。就可以使用一个SPL应用调用另外一个存储过程了。
name [ ([ parameters ]) ];
name是存储过程的标识,parameters指的是实际参数的列表。
说明
  • 如果存储过程没有实际参数传递, 那么运行该存储过程的时候不应该带有括号。
  • 在PSQL或POLARDB for Oracle环境下执行EXEC命令时,调用存储过程的语法与上面所示的语法流程相同。
下面是一个从匿名代码块中调用存储过程的示例:
BEGIN
    simple_procedure;
END;

That's all folks!
说明 每种应用程序都有它们自己的方式来调用存储过程。例如:在Java应用程序中,对存储过程的调用是通过JDBC编程接口来实现的。

删除存储过程

我们可以使用DROP PROCEDURE 从数据库中删除一个存储过程。
DROP PROCEDURE name;

name 是将要被删除掉存储过程的名称。

在下面这个示例中,我们使用DROP PROCEDURE命令删除掉一个先前已创建的存储过程。
DROP PROCEDURE simple_procedure;