<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];
*pro_name*
:存储过程的名称,如果数据库中已经存在了此名称,则可以指定“or replace”关键字,这样新的存储过程将覆盖掉原来的存储过程。*parameter1*
:存储过程的参数,若是输入参数,则需要在其后指定“in”关键字;若是输出参数,则需要在其后面指定“out”关键字。在in或out关键字的后面是参数的数据类型,但不能指定该类型的长度。创建一个存储过程,该存储过程实现向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 过程已成功完成。
这是一种输入类型的参数,参数值由调用方传入,并且只能被存储过程读取,是默认的参数模式。
比如创建一个存储过程,并定义 3 个in 模式的变量,然后将这3 个变量的值插入到dept表中: