Day62 Oracle数据库(四)

一.游标

  1. 概念: 是用来操作查询结果集,相当于是JDBC中的ResultSet
  2. 语法:
         cursor  游标名  is  查询结果集
  3. 普通游标 开发步骤:
    1. 声明游标            cursor  游标名  is  查询结果集
    2. 打开游标             open  游标名
    3. 从游标中取数据       fetch  游标名  into  变量
                         游标名%found       :  找到数据
                         游标名%notfound  :  没有找到数据
    4. 关闭游标
                                  close  游标名
  4. 系统引用游标
    1. 声明游标    游标名  sys_refcursor
    2. 打开游标    open  游标名  for  结果集
    3. 从游标中取数据
    4. 关闭游标
  5. for循环遍历游标
    1. 不需要声明额外变量
    2. 不需要打开游标
    3. 不需要关闭游标

二.例外(意外)

  1. 概念 :  程序运行的过程发生异常,相当于是JAVA中的异常
  2. 语法:
    declare
            --声明变量
    begin
            --业务逻辑
    exception
            --处理异常
            when  异常1  then
            when  异常2  then
                ...
            when  others  then
                ...处理其它异常
    end;
  3. Oracle中常见异常:
    1. zero_divide  : 除零异常
    2. value_error  : 类型转换异常
    3. too_many_rows  : 查询出多行记录,但是赋值给了rowtype记录一行数据
    4. no_data_found  : 没有找到数据
    5. 自定义异常 : 
              异常名  exception;
              raise  异常名 ;

三.存储过程

  1. 概念 : 实际上是封装在服务器上一段PLSQL代码片段,已经编译好的代码
  2. 语法:
    create  [or  replace]  procedure  存储过程的名称(参数名  in | out 参数类型)
    is  |  as
     -- 声明部分
    begin
     -- 业务逻辑
    end;
  3. 调用:
    1. 方式一: call  存储过程的名称(参数);
    2. 方式二: 用的最多的方式
      declare
      begin
          存储过程的名称(参数);
      end;

四.存储函数

  1. 概念 : 实际上是封装在服务器上一段PLSQL代码片段,已经编译好的代码
  2. 语法:
    create  [or  replace]  function  存储函数的名称(参数名  in | out 参数类型)  return 参数类型
    is  |  as
     -- 声明部分
    begin
     -- 业务逻辑
    end;
  3. 存储过程和存储函数的区别:
    1. 它们本质上没有区别
    2. 函数存在的意义是给过程调用, 存储过程里面调用存储函数
    3. 函数可以在sql语句里面直接调用
    4. 存储过程能实现的,存储函数也能实现,存储函数能实现的,存储过程也能实现

五.JAVA调用存储过程

  1. 注册驱动
  2. 获取连接
  3. 获取执行SQL的statement
    String sql = "{call  proc_gettotalsal(?,?)}";           
    CallableStatement  state  = conn.prepareCall(sql);
  4. 设置输入参数
    state.setInt(1,4399);
  5. 注册输出参数
    state.registerOutParameter(2,OracleTypes.NUMBER);
  6. 执行statement
    state.execute();
  7. 获取执行结果
    int totalsal = state.getInt(2);
    syso(totalsal);
  8. 关闭连接

六.JAVA调用存储函数

  1. 注册驱动
  2. 获取连接
  3. 获取执行SQL的statement
    String sql = "{? = call  func_getsal(?)}";           
    CallableStatement  state  = conn.prepareCall(sql);
  4. 注册返回类型参数
    state.registerOutParameter(1,OracleTypes.NUMBER);
  5. 设置输入参数
    state.setInt(2,4399);
  6. 执行statement
    state.execute();
  7. 获取执行结果
    int totalsal = state.getInt(1);
    syso(totalsal);
  8. 关闭连接

七.触发器

  1. 作用:当用户执行了 insert | update | delete这些操作之后,可以触发一系列其它的动作|业务逻辑

  2. 语法:
    create [or replace]  trigger  触发器的名称
    before  |  after
    insert  |  update  |  delete
    on  表名
    [for each row]
    declare
    begin
    end;

  3. 触发器的分类 :

    1. 语句级触发器 : 不管影响多少行,都只会执行一次

    2. 行级触发器 : 影响多少行,就触发多少次    for each row

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值