<aside> 💡 存储过程是一种命名的PL/SQL程序块,它既可以没有参数,也可以有若干个输入、输出参数,甚至可以有多个既作输入又作输出的参数,但它通常没有返回值。存储过程被保存在数据库中,它不可以被SQL 语句直接执行或调用,只能通过EXECUT 命令执行或在PL/SQL 程序块内部被调用。由于存储过程是已经编译好的代码,所以其被调用或引用时,执行效率非常高。

</aside>

创建存储过程

创建存储过程的语法如下:

create [or replace] procedure pro_name [(parameter1[,parameter2]…)] is|as
begin
   plsql_sentences;
[exception]
   [dowith _ sentences;]
end [pro_name];

创建一个存储过程,该存储过程实现向dept表中插入一条记录:

SQL> create or replace procedure save_dept is
  begin
    insert into dept values(50,'开发一部','福州');
    commit;
    dbms_output.put_line('插入数据成功!');
  end;
  /

过程已创建。

创建过程中如果出现错误,可以使用show err指令查看。

若要执行这个存储过程,则需要在SQL*Plus 环境中使用EXECUTE命令来执行该存储过程,或者在PL/SQL 程序块中调用该存储过程。

SQL> set serveroutput on
SQL> execute save_dept
插入数据成功!

PL/SQL 过程已成功完成。

或者在 PL/SQL 块中调用存储过程:

SQL> delete from dept where deptno=50;

已删除 1 行。

SQL> set serveroutput on
SQL> begin
    save_dept;
  end;
  /
插入数据成功!

PL/SQL 过程已成功完成。

存储过程的参数

1.IN模式参数

这是一种输入类型的参数,参数值由调用方传入,并且只能被存储过程读取,是默认的参数模式。

比如创建一个存储过程,并定义 3 个in 模式的变量,然后将这3 个变量的值插入到dept表中: