一般的sql语句每执行一次就编译一次,而存储过程只在创造时编译,以后每次执行存储过程都不需要再重新编译,所以使用存储过程可提高数据库执行速度。
当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
存储过程可以重复使用,可减少数据库开发人员的工作量。
存储过程oracle?安全性高,可设定只有某此用户才具有对指定存储过程的使用权
语法:
create [or replace] procedure 过程名(参数列表) AS -- AS相当于PLSQL程序中的declare,AS关键字不可以省略, declare可以在没有声明任何变量/cursor/exception时可以省略。 PLSQL子程序体
在Oracle的存储过程和函数中,其实IS和AS是同义词,没有什么区别。
pl sql安装,还有在自定义类型(TPYE)和包(PACKAGE)时,使用IS和AS也并没有什么区别。
但是在创建视图(VIEW)时,只能使用AS而不能使用IS。
在声明游标(CURSOR)时,只能使用IS而不能使用AS。
一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。但过程和函数都可以通过 out 指定一个或多个输出参数。我们可以利用 out 参数,在过程和函数中实现返回多个值。
本质区别:
存储函数有返回值,而存储过程没有返回值。
3.1 如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数。
3.2 即便是存储过程使用了out类型的参数,起本质也不是真的有了返回值,
3.3 而是在存储过程内部给out类型参数赋值,在执行完毕后,我们直接拿到输出类型参数的值。
查询存储过程sql语句,对给定部门(作为输入参数)的员工进行加薪操作,到公司时间
在(?,1995)期间,为其加薪5%,
在(1995,1998)之间加薪3%,
在(1998,?)的加薪1%
并得到此次加薪公司每月需要额外付出多少成本(out 型参数)
create or replace procedure add_sal(dept_id number, temp out number ) //temp为输出参数 out型
is//定义一个游标corsor sal_corsor is select employee_id ,salary, hire_date from salary where department_id = dept_id//定义一个变量 为加薪比例v_i number :=0;
begintemp := 0for c in sal_corsor loop //循环if to_cahr (c.hire_date,'yyyy') < '1995' then v_i := 0.05;else if to_cahr (c.hire_date,'yyyy') < '1998' v_i :=0.03;else v_i :=0.01;else if;//更新工资update employee set salary = salary*(1+v_i) where employee_id = c.employee_id;//计算付出的成本temp := temp + salary * v_i;end loop;
end;
测试存储过程
//给80号部门加薪
declarev_temp number(10) :=0
beginadd_sal(80, v_temp);
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态