在Oracle中,可以在数据库中定义子程序,这种程序块称为存储过程(Procedure)。它存放在数据字典中,可以在不同用户和应用程序之间共享,可实现程序的优化和重用。使用存储过程的优点是:
(1)过程在服务器端运行,执行速度快;
(2)过程执行一次后代码就驻留在高速缓冲存储器中,在以后的 *** 作中,只需从高速缓冲存储器中调用已编译代码执行即可,可以提高系统性能。
(3) 确保数据库的安全。可以不授权用户直接访问应用程序中的一些表,而是授权用户执行访问这些表的过程。非表的授权用户除非通过过程,否则就不能访问这些表。
(4) 自动完成需要预先执行的任务。过程可以在系统启动时自动执行,而不必在系统启动后再进行手工 *** 作,可以自动完成一些需要预先执行的任务。
基本概念
存储过程和存储函数相当于一个东西。
存储过程在Oracle里叫procedure。
存储过程没有返回值。
存储函数在Oracle里叫function。
存储函数有返回值。
基本语法
create or replace procedure 名字
--create or replace 意思是创建或者替换
as
--可以在此定义参数
begin
语句
end
例:
create or replace procedure sayhello
as
--说明 相当与declare
begin
dbms_output.put_line('Hello World')
end
基本调用
begin
-- Call the procedure
sayhello
sayhello
sayhello
end
带参数的存储过程--查询某个员工的年收入
create or replace procedure upmoney(testname in test_procedure.name%type)
as
begin
update test_procedure t set t.money = t.money + 1000
where t.name = testname
end
upmoney
特别的地方,参数要指明是输入参数还是输出参数。
存储函数
create or replace function Fupmoney(tname in varchar2) return number
as --定义月薪参数
tmoney test_procedure.money%type
begin
--得到月薪
select t.money
into tmoney
from test_procedure t
where t.name = tname
dbms_output.put_line(tmoney*12)
return(tmoney*12)
end
创建一个多输出参数的存储函数例子
create or replace procedure manyparm(tname in varchar2,
tjob out varchar2,
tmoney out number,
tdept out varchar2)
is
begin
select t.job,t.money,t.dept
into tjob,tmoney,tdept
from test_procedure t
where t.name = tname
end manyparm
set serveroutput on size 10000--定义变量,如下定义变量aa,bb,cc
variable aa number
variable bb number
variable cc varchar2(20)
begin
存储过程名 (入参1,...,入参N,:出参1,...,:出参N)
dbms_output.enable --输出激活设置
dbms_output.put_line(:参数N) --输出参数N
end
/
如:
set serveroutput on size 10000
variable aa number--定义number变量时不要定义长度
variable cc varchar2(20)--定义字符串变量要定义长度
begin
sp_tmp_getindex ('503','000','test',0,:aa,:cc)
dbms_output.enable
dbms_output.put_line(:aa) --使用变量时前面要加:
end
/
当没有出参或者入参时,使用下面方法是可以的,但是存在出入参时下面的方法就不行了。
exec 存储过程名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)