★函数
函数和过程很像,他也是一种存储在数据库中命名的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 values(user,sysdate);
end;
第三步:在emp表上做update 或则delete或 insert操作时就会自动触发触发器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 values(user,sysdate,v_action);
end;