存储函数
一、概念与存储过程相比,存储函数是有返回值的:而且创建存储函数的关键字也不一们:函数关键字:Function 过程关键字:procedure语法:Create function 函数名(参数......)Return 数据类型 is定义变量;Begin执行语句;Return 变量;End;/二、创建存储函数
范例: 请编写一个函数,可以接收用户名,并返回这个用户的年薪 create function my_fun(v_name varchar2) return number is v_sal number; begin select sal into v_sal from emp where ename=v_name; return v_sal; end; / --调用函数 select my_fun('SMITH') from dual;
![]()
二、sql条件控制语句 1.简单条件判断: 语法: If 判断条件 then End if;
范例: 编写一个过程,可以输入一个员工名字,如果该员的工资低于2000,则给这个员工加1000. create procedure my_if(v_name varchar2) is v_sal emp.sal%type; begin select sal into v_sal from emp where ename=v_name; if v_sal<2000 then update emp set sal=sal+1000 where ename=v_name; end if; end; /
调用过程: call my_if('SMITH');
查看: select * from emp;
2.二重条件分支 If 判断条件 then 条件成立完成的功能; Else 条件不成立完成的功能; End if;
范例: 编写一个过程,可以输入一个员工名字,如果员工的奖金不是0,则在原来的基础上增加200,;如果为0 则将其设置为500; create procedure my_if_else(v_name varchar2) is v_comm emp.comm%type; begin select comm into v_comm from emp where ename=v_name; if v_comm<>0 then update emp set comm=comm+200 where ename=v_name; else update emp set comm=500 where ename=v_name; end if; end; /
调用过程: call my_if_else('SMITH');
查看结果: select * from emp;
![]()
3.多重条件分支 If 判断条件 then 条件成立完成的功能; Elsif 判断条件 then 条件成立完成的功能; Else 条件不成立完成的功能; End if;
范例: 编写 一个过程,可以输入员工编号,如果该员的职位是PRESIDENT就给他的工资增加1000, 如果职位是:MANAGER 就给他的工资增加500,其他的员工都增加200; create procedure my_if_elsif(v_empno number) is v_job emp.job%type; begin select job into v_job from emp where empno=v_empno; if v_job='MANAGER' then update emp set sal=sal+500 where empno=v_empno; elsif v_job='PRESIDENT' then update emp set sal=sal+1000 where empno=v_empno; else update emp set sal=sal+200; end if; end; /
调用过程: call my_if_elsif(7369);
查看结果: select * from emp;
![]()
三、循环语句: 1.Loop--->与do.....while()类似: 语法: 以loop开头,以end loop结尾,这种循环至少会被执行一次
案例: 1.有一张新表users,编写一个过程,可以输入用户名,并循环添加10个用户到users 表中,用户编号,从1 开始增加
第一步:创建一个表users
create table users(id number primary key, name varchar2(20) not null);
遍写过程: create procedure my_pro(v_name varchar2) is v_num number:=1; begin loop insert into users values(v_num,(v_name||v_num)); exit when v_num=10; v_num:=v_num+1; end loop; end; /
调用过程: call my_pro('zhang');
查看结果:
![]()
While循环
语法: While 循环条件 loop .....end loop;
案例:编写一个过程,用while添加用户,从第11个开始增加数据
For循环