1、 Oracle的自定义函数
2、 Oracle的触发器
3、 Oracle的存储过程
知识点一:自定义函数
语法:create [or replace] function 函数名(参数)
return返回值类型—必须
is
--变量的声明
begin
--执行语句
--return 返回变量
--exception 异常块(return 异常编号)
end;
Java:
int add(int no1,int no2)
{
int sum = no1+no2;
return sum;
}
Oracle
--编写一个简单的自定义函数 createorreplacefunction fun_add(no1 number,no2 number) returnnumber is v_sum number; begin v_sum := no1+no2; return v_sum; exception whenothersthen return-1; end; |
调用函数
方式一:
select fun_add(50,50) from dual; |
方式二:
declare v_no1 number(2); v_no2 number(2); v_sum number(3); begin v_no1 :=50; v_no2 :=50; v_sum := fun_add(v_no1,v_no2);
if v_sum =-1then dbms_output.put_line('输入的数据有误!'); else dbms_output.put_line(v_sum); endif;
exception whenothersthen dbms_output.put_line('输入的数据有误!'); end; |
知识点二:触发器 trigger(DML触发器)
语法:
create[or replace] trigger tri_名字
after|before
insert|delete|update
on 表名
[for each row]—行级触发器
begin
--执行语句块
end;
案例:删除emp表数据的时候,让emp_bak表自动备份
--删除emp_bak表数据的时候,让emp_bak01表自动备份 createorreplacetrigger tri_delemp afterdelete on emp_bak foreachrow begin insertinto emp_bak01(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal, :old.comm,:old.deptno); end; |
案例:创建userinfo(userid,uname,upw),userid自动+1实现
步骤一:创建一个表 createtable userinfo( userid number(4) primary key, uname varchar2(10)notnullunique, upw varchar2(10)notnull ) |
步骤二:创建序列 create sequence seq_userid; |
步骤三:创建触发器 createorreplacetrigger tri_userid beforeinsert on userinfo foreachrow begin select seq_userid.nextval into:new.userid from dual; end; |
步骤四:启动触发器 insert into userinfo(uname,upw) values('lily','123456'); |
案例:实现更改userinfo表的名字这个字段的时候,对原来数据进行备份,备份到userinfo_bak表中
知识点三:存储过程procedure
语法:
create or replace procedure pro_存储过程名称(输入参数 in,输出参数 out)
as
--变量的声明
begin
--执行过程
--exception异常处理过程
end;
案例:定义存储过程,完成userinfo表的插入功能(完成账户注册这个功能)
--完成userinfo表的插入功能 createorreplaceprocedure pro_userreg( v_uname in userinfo.uname%type,v_upw in userinfo.upw%type) as begin insertinto userinfo(uname,upw)values(v_uname,v_upw); end; |
执行存储过程 方法一:命令行执行 execute pro_userreg('jack','123456'); |
方法二:plsql执行 begin pro_userreg('jack','123456'); end; |
方法三:应用程序Java,C#,php调用存储过程
案例二:定义存储过程完成登录
--定义存储过程完成登录 createorreplaceprocedure pro_userlog( v_uname userinfo.uname%type,v_upw userinfo.upw%type, v_result outnumber) as begin selectcount(*)into v_result from userinfo where uname = v_uname and upw = v_upw; end; |
declare v_uname userinfo.uname%type; v_upw userinfo.upw%type; v_result number(1); begin v_uname :='jack'; v_upw :='123456';
pro_userlog(v_uname,v_upw,v_result);
if v_result =1then dbms_output.put_line('登陆成功!'); else dbms_output.put_line('登陆失败!'); endif;
end; |
2017-10-31 18:37:14