
1、执行速度比普通的SQL语句快
再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。
由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
2、便于集中控制
当企业规则变化时,只需要在数据库的服务器中修改相应的存储过程,而不需要逐个的在应用程序中修改,应用程序保持不变即可,这样就省去了修改应用程序工作量。
3、可以降低网络的通信量
4、保证数据库的安全性和完整性
通过存储过程不仅可以使没有权限的用户在控制之下间接地存取数据库,保证数据的安全;而且可以使相关的动作在一起发生,从而可以维护数据库的完整性。
5、灵活性
存储过程可以用流控制语句编写,具有很强的灵活性,可以完成复杂的判断和运算,可以根据条件执行不通SQL语句。
1 假设更新emp表create procedure my_pro is
begin
update emp set sal=
(case
when job='PRESIDENT' then sal+1000
when job='MANAGER' then sal+500
else sal+200
end)
commit
end
/
2 create table emp_bak1 as select * from emp where 1=2
create table emp_bak2 as select * from emp where 1=2
insert into emp_bak1 select * from emp where sal>(select avg(sal) from emp)
insert into emp_bak2 select * from emp where sal<(select avg(sal) from emp)
一定要用游标的话
declare
avgsal number
cursor emp_cur is select avg(sal) a from emp
begin
open emp_cur
fetch emp_cur into avgsal
insert into emp_bak1 select * from emp where sal>avgsal
insert into emp_bak2 select * from emp where sal<avgsal
commit
close emp_cur
end
/
直接sql语句:
select wm_concat(decode(e.empno,7369,d.dname,null)),wm_concat(decode(e.empno,7369,e.ename,null)) from emp e, dept d
where e.empno in ((select e1.mgr from emp e1 where e1.empno = 7369), 7369)
and e.deptno = d.deptno
/
function :
create or replace function print_(p_empno in number) return varchar2 isl_result varchar2(100)
begin
select wm_concat(decode(e.empno, p_empno, d.dname, null)) || ',' ||wm_concat(decode(e.empno, p_empno, e.ename, null))
into l_result
from emp e, dept d
where e.empno in
((select e1.mgr from emp e1 where e1.empno = p_empno), p_empno)
and e.deptno = d.deptno
return(l_result)
end
测试:
SQL> select print_(7369) from dualPRINT_(7369)
--------------------------------------------------------------------------------
RESEARCH,SMITH
SQL>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)