依稀记得是类似于函数的一个东西,可以带参也可以不,可以有返回值也可以没有
同样使用的时候也需要调用。
存储过程的定义:
以命名的数据库对象形式存在数据库中,不在本地,所以存在数据库中,用户登进数据库都可以调用或修改代码。
创建存储过程需要我们的账户至少要拥有 CREATE 和 EXECUTE 存储过程的权限。存储过程由数据库提供安全保障,只有有权限的所有者的授权或者创建者本身才可以调用执行存储过程。
存储过程的信息时写入数据字典的,所以可以看作是一个公用模块。用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。
像其他高级语言的过程和函数一样,可以传递参数给存储过程,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。
函数过程需要编译,以用来排除语法错误,只有编译通过才能调用
创建存储过程
create /replace procedure 存储过程名
[(参数1 类型,参数2 out 类型……)]
as 变量名 类型
begin
程序代码体
end;
运用此语法我们创建了一个名为“procedure_name”的存储过程。首行的 replace 表示替换,对于Oracle的存储过程而言,我们只能创建 (create)、删除 (drop) 或替换 (replace) 它,没有类似于SQL Server的修改 (Alter) 操作。
as 与SQL Server中的Declare作用相似,但as不可省略,是固定语法,之后讲到参数的时候,我们就要在as和begin之间插入参数列表
begin 与 end 表示PL-SQL语句块的开始和结束,所有需要执行的语句都写在此处。end结束后,还需跟上 “/” 表示执行上述语句块,创建这个存储过程。
create or replace procedure examsp_query_cs as
begin
dbms_output.put_line('Hello World');
end examsp_query_cs;
/
示例一:无参无返
create procedure p1
as
begin
dbms_output.put_line('hello world');
end;
--执行存储过程方式1--推荐此方式
set serveroutput on;
begin
p1()
end;
--执行存储过程方式2
set serveroutput on;
execute p1();--只能在sqlplus中调用
--执行存储过程方式3
-- 通过 call 执行,可以在任意场合使用,无论有没有参数都要写括号,在括号中写入参数 call proc_name([ param_1, param_2... ]);