17.函数和触发器

★函数

函数和过程很像,他也是一种存储在数据库中命名的pl/sql块,并且函数也可以接受0到多个值。函数与过程的主要区别,函数必须有返回值,函数可以作为一个表达式的一部分,函数不能作为一个完整的语句。

 

语法:

create function 函数名[参数1,参数2....] return 返回数据的类型 is

[变量]

begin

函数代码;

[exception

异常代码]

end [过程名];

 

▼案例一:输入员工编号,返回员工姓名

create or replace function myfuc_1(no number) return varchar2 is

name emp.ename%type;

begin

select ename into name from emp where empno=no;

return name;

end;

 

执行:

方法一:

declare    

     name varchar2(20);

begin

     name:=myfuc_1(7788);

      dbms_output.put_line(name);

end;

 

方法二:

select myfuc_1(7788) from dual;

 

方法三:

variable name varchar2;

call myfuc_1(7788) into :name;

 

Java中调用上面的函数

package test3_12;

import java.sql.*;

public class Test3 {

public Test3(){

try {

//1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

//2.获得连接

Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");

//3.调用函数

CallableStatement cs = conn.prepareCall("{? = call myfuc_1(?)}");

//4.给?号赋值

cs.registerOutParameter(1,oracle.jdbc.OracleTypes.VARCHAR);//Types.VARCHAR

cs.setInt(2, 7369);

//5.执行函数

cs.execute();

//6.取出返回值

String name = cs.getString(1);

System.out.println(name);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

public static void main(String[] args){

new Test3();

}

}

 

★触发器

触发器是关系数据库特有的一项技术,触发器的结构和过程函数一样。触发器的主要作用是对系统操作的维护

触发器是一个与数据库事件联系在一起,当事件发生时,触发器会自动的被调用。过程是用户显示的调用,触发器不能被直接调用,当发生指定事件时自动调用。

 

●语句触发器:

 

案例一:

第一步:创建表emp_log

create table emp_log(

who varchar2(20),

when date

)

 

第二步:emp表上创建语句触发器

create or replace trigger trig_1 before insert or update or delete on emp

begin

insert into emp_log valuesuser,sysdate;

end;

 

第三步:emp表上做update 或则deleteinsert操作时就会自动触发触发器trig_1;

查询 emp_log表可以看到插入到表中的内容

 

案例二:

第一步:创建表emp_log1

create table emp_log1(

who varchar2(20),

when date,

action varchar2(20)

)

 

第二步;创建触发器

create or replace trigger trig_2 before insert or update or delete on emp

declare

v_action varchar2(20);

begin

if inserting then

v_action:='emp中插入数据';

elsif updating then

v_action:='更新emp中数据';

elsif deleting then

v_action:='删除emp中数据';

end if;

insert into emp_log1 valuesuser,sysdate,v_action);

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值