标签:根据 区别 char turn 输出 逻辑 lin creat 定义函数
之前我们学的pl/sql代码都属于匿名块...
没有名字
匿名块的缺点
1. 不能够保存在数据库服务器上 如果想以后使用 只能把它复制到一个文件中
或者是 另存为成*.sql文件.下一次再使用的时候 还要复制回来或者 打开这个sql
文件再执行,比较麻烦! 不可复用
2.匿名块执行速度慢
第二次执行的时候 要从新编译 再运行 比较慢
而存储过程 相当于给匿名块起一个名字 预编译的sql语句
编译好以后 存到数据库服务器上 下一次直接用就可以了
存储过程执行速度比匿名块快
二. 什么是存储过程
预编译的sql语句, 把以前的pl/sql匿名块 起一个名字 预编译保存到数据库服务器上
就是存储过程.
三. 如何编写存储过程
把匿名块转换成存储过程需要两步
1. declare 改成is 或者as
2. create or replace procedure 存储过程名
(一)定义存储过程
语法如下:
create or replace procedure 存储过程名
is
begin
end;
演示代码:
--定义一个存储过程
--需求: 给所有的员工涨工资
create or replace procedure increase_salary
is
cursor c is
select * from emp2 for update;
begin
for v_temp in c loop
if(v_temp.sal<1200) then
update emp2 set sal=sal+500 where current of c;--当前游标指向的记录
elsif(v_temp.sal<1500) then
update emp2 set sal=sal+300 where current of c;--当前游标指向的记录
else
update emp2 set sal=sal+100 where current of c;--当前游标指向的记录
end if;
end loop;
end;
(二)调用存储过程
(1) 命令窗口
execute 存储过程名;
execute increase_salary;
(2) 使用pl/sql代码块执行
begin
存储过程名();
end;
演示代码:
begin
increase_salary();
end;
*******************************带参数的存储过程***********************************
--需求: 求两个数中的比较大的那个数是谁
--in 输入参数 只能输入不能当做左值
--out 输出参数 只能用做左值 不能给它传入一个值 如果程序员非要给一个输出参数 传值 打印的时候是打印不出来的
create or replace procedure proce(v_a in number,v_b number,v_res out number,v_temp in out number)
is
begin
dbms_output.put_line(v_res);
end;
declare
v_a number:=3;
v_b number:=4;
v_res number;
v_temp number:=5;
begin
proce(v_a,v_b,v_res,v_temp);
--dbms_output.put_line(v_res);
--dbms_output.put_line(v_temp);
end;
********************************存储过程和函数的区别*******************************
1.存储过程没有返回值, 函数是有返回值的
2.存储过程一般用于执行某个业务逻辑(涨工资),函数一般用来辅助sql进行计算的...
3.函数是可以用在select语句后面的,而存储过程不能用在select 语句后面
select lower(ename) from emp
*****************************存储过程如果想返回一个值怎么办?*************************
使用 输出参数 代替返回值
一.什么是函数 what
函数:类似于java方法 有一定的作用
区别: 必须有返回值
二.自定义函数
function
根据员工的工资 得到税率
create or replace function sal_tax(v_sal number)
return number
is
v_tax number;
begin
if(v_sal<2000) then
v_tax:=0.10;
elsif(v_sal<2750) then
v_tax:=0.15;
else
v_tax:=0.20;
end if;
return v_tax;
end;
使用函数
select lower(ename),sal_tax(sal) from emp;
****************学生练习: 定义一个函数 *******************
输入参数 boolean 类型的变量
返回值 varchar2 如果传入的是true 返回‘true‘;传入false 返回‘false‘;
传入null 返回‘null‘
标签:根据 区别 char turn 输出 逻辑 lin creat 定义函数
原文地址:https://www.cnblogs.com/MrTanJunCai/p/9907449.html