增长数据独立性。与视图的效果类似,利用存储过程能够把数据库基础数据和程序(或用户)隔离开来,当基础数据的结构发生变化时,能够修改存储过程,这样对程序来讲基础数据的变化是不可见的,也就不须要修改程序代码了。mysql
简化复杂的操做。存储过程能够把须要执行的多条SQL语句封装到一个独立单元中,用户只需调用这个单元就能达到目的。这样就实现了一人编写多人调用。面试
提升性能。完成一项复杂的功能可能须要多条SQL语句,同时SQL每次执行都须要编译,而存储过程能够包含多条SQL语句,并且建立后只须要编译一次,之后就能够直接调用。sql
变量声明块:紧跟着的as (is )关键字,能够理解为pl/sql的declare关键字,用于声明变量。 变量声明块用于声明该存储过程须要用到的变量,它的做用域为该存储过程。另外这里声明的变量必须指定宽度。数据库
过程语句块:从begin 关键字开始为过程的语句块。存储过程的具体逻辑在这里来实现。编程
异常处理块:关键字为exception ,为处理语句产生的异常。该部分为可选 。服务器
结束块:由end关键字结束。编程语言
存储过程的参数传递方式 : - 存储过程的参数传递有三种方式:IN,OUT,IN OUT . - IN 按值传递,而且它不容许在存储过程当中被从新赋值。若是存储过程的参数没有指定存参数传递类型,默认为IN 工具
create or replace procedure proc1(
p_para1 varchar2,
p_para2 out varchar2,
p_para3 in out varchar2
)as
v_name varchar2(20);
begin
p_para1 :='aaa';
p_para2 :='bbb';
v_name := '张三丰';
p_para3 := v_name;
dbms_output.put_line('p_para3:'||p_para3);
null;
end;
复制代码
OUT 参数:做为输出参数,须要注意,当一个参数被指定为OUT类型时,就算在调用存储过程以前对该参数进行了赋值,在存储过程当中该参数的值仍然是NULL.性能
IN OUT 是真正的按引用传递参数。便可做为传入参数也能够做为传出参数。spa