Oracle 笔记(五)

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

原文地址:https://www.cnblogs.com/angelye/p/7762953.html