一.游标
- 概念: 是用来操作查询结果集,相当于是JDBC中的ResultSet
- 语法:
cursor 游标名 is 查询结果集 - 普通游标 开发步骤:
- 声明游标 cursor 游标名 is 查询结果集
- 打开游标 open 游标名
- 从游标中取数据 fetch 游标名 into 变量
游标名%found : 找到数据
游标名%notfound : 没有找到数据 - 关闭游标
close 游标名
- 系统引用游标
- 声明游标 游标名 sys_refcursor
- 打开游标 open 游标名 for 结果集
- 从游标中取数据
- 关闭游标
- for循环遍历游标
- 不需要声明额外变量
- 不需要打开游标
- 不需要关闭游标
二.例外(意外)
- 概念 : 程序运行的过程发生异常,相当于是JAVA中的异常
- 语法:
declare
--声明变量
begin
--业务逻辑
exception
--处理异常
when 异常1 then
when 异常2 then
...
when others then
...处理其它异常
end; - Oracle中常见异常:
- zero_divide : 除零异常
- value_error : 类型转换异常
- too_many_rows : 查询出多行记录,但是赋值给了rowtype记录一行数据
- no_data_found : 没有找到数据
- 自定义异常 :
异常名 exception;
raise 异常名 ;
三.存储过程
- 概念 : 实际上是封装在服务器上一段PLSQL代码片段,已经编译好的代码
- 语法:
create [or replace] procedure 存储过程的名称(参数名 in | out 参数类型)
is | as
-- 声明部分
begin
-- 业务逻辑
end; - 调用:
- 方式一: call 存储过程的名称(参数);
- 方式二: 用的最多的方式
declare
begin
存储过程的名称(参数);
end;
四.存储函数
- 概念 : 实际上是封装在服务器上一段PLSQL代码片段,已经编译好的代码
- 语法:
create [or replace] function 存储函数的名称(参数名 in | out 参数类型) return 参数类型
is | as
-- 声明部分
begin
-- 业务逻辑
end; - 存储过程和存储函数的区别:
- 它们本质上没有区别
- 函数存在的意义是给过程调用, 存储过程里面调用存储函数
- 函数可以在sql语句里面直接调用
- 存储过程能实现的,存储函数也能实现,存储函数能实现的,存储过程也能实现
五.JAVA调用存储过程
- 注册驱动
- 获取连接
- 获取执行SQL的statement
String sql = "{call proc_gettotalsal(?,?)}";
CallableStatement state = conn.prepareCall(sql); - 设置输入参数
state.setInt(1,4399); - 注册输出参数
state.registerOutParameter(2,OracleTypes.NUMBER); - 执行statement
state.execute(); - 获取执行结果
int totalsal = state.getInt(2);
syso(totalsal); - 关闭连接
六.JAVA调用存储函数
- 注册驱动
- 获取连接
- 获取执行SQL的statement
String sql = "{? = call func_getsal(?)}";
CallableStatement state = conn.prepareCall(sql); - 注册返回类型参数
state.registerOutParameter(1,OracleTypes.NUMBER); - 设置输入参数
state.setInt(2,4399); - 执行statement
state.execute(); - 获取执行结果
int totalsal = state.getInt(1);
syso(totalsal); - 关闭连接
七.触发器
-
作用:当用户执行了 insert | update | delete这些操作之后,可以触发一系列其它的动作|业务逻辑
-
语法:
create [or replace] trigger 触发器的名称
before | after
insert | update | delete
on 表名
[for each row]
declare
begin
end; -
触发器的分类 :
-
语句级触发器 : 不管影响多少行,都只会执行一次
-
行级触发器 : 影响多少行,就触发多少次 for each row
-