一、存储过程简介:
1、存储过程是以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。
2、存储过程可由数据库提供安全保证,要想使用存储过程,需要有存储过程的所有者的授权,只有被授权的用户或创建者本身才能调用执行存储过程。
3、存储过程的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。
4、像其他高级语言的过程和函数一样,可以传递参数给存储过程,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。
5、存储过程需要进行编译,以排除语法错误,只有编译通过才能调用。
1、创建存储过程
create [or replace] procedure 存储过程名
[(参数1 类型,参数2 out 类型……)]
as
变量名 类型;
begin
程序代码体
end;
运用此语法我们创建了一个名为“procedure_name”的存储过程。首行的 replace 表示替换,对于Oracle的存储过程而言,我们只能创建 (create)、删除 (drop) 或替换 (replace) 它,没有类似于SQL Server的修改 (Alter) 操作。
begin 与 end 表示PL-SQL语句块的开始和结束,所有需要执行的语句都写在此处。end结束后,还需跟上 “/” 表示执行上述语句块,创建这个存储过程。
2、无参无返
create or replace procedure p1
–or replace代表创建该存储过程时,若存储名存在,则替换原存储过程,重新创建
–无参数列表时,不需要写()
as
begin
dbms_output.put_line(‘hello world’);
end;
–执行存储过程方式1
set serveroutput on;
begin
p1();
end;
–执行存储过程方式2
set serveroutput on;
execute p1();
3、有参有返
create or replace procedure p2
(name in varchar2,age int,msg out varchar2)
–参数列表中,声明变量类型时切记不能写大小,只写类型名即可,例如参数列表中的name变量的声明
–参数列表中,输入参数用in表示,输出参数用out表示,不写时默认为输入参数。
------------输入参数不能携带值出去,输出参数不能携带值进来,当既想携带值进来,又想携带值出去,可以用in out
as
begin
msg:=‘姓名’||name||‘,年龄’||age;
–赋值时除了可以使用:=,还可以用into来实现
–上面子句等价于select ‘姓名’||name||‘,年龄’||age into msg from dual;
end;
–执行存储过程
set serveroutput on;
dec