oracle存储过程,可以通过sqlcode 获取异常编码、通过sqlerrm获取异常信息。

例子:

create or replace procedure write2blob(p_id        in number, --id p_blob_data in blob, p_msg out varchar2) --数据 is v_lobloc blob; --目标blob字段 v_blob_data blob; --作为接受参数的字段,参数变量不能直接拿来赋值 v_amount binary_integer; --总长度 v_sub_length binary_integer; --一次读取的最大长度,不超过32766 v_sub_blob blob; --一次读取的子串 v_offset binary_integer; --游标 v_err_msg varchar2(1000); --测试用 v_id binary_integer; --要修改或新增的记录ID v_temp binary_integer; --临时变量用于判断是否有v_id对应的记录 begin v_amount := length(p_blob_data); v_blob_data := p_blob_data; v_sub_length := 32767; v_offset := 1; v_id := p_id; v_temp := 0; --execute immediate v_query_string into v_lobloc; select count(1) into v_temp from a where id = v_id; --查询是否有v_id对应的记录,并且赋值给v_temp /*注意:无论是修改还是新增,blob字段都需要用empty_blob()进行初始化,否则后边的blob内容,不能写进表里*/ /***************************这里为了演示异常信息,把if else判断给注释掉了********************/ /*if v_temp = 0 then insert into a (id, img) values (v_id, empty_blob()); --如果v_temp为0新增 else update a set img = empty_blob() where id = v_id; --如果v_temp为1修改 end if; */ commit; select img into v_lobloc from a where id = v_id for update; if v_amount > v_sub_length then --dbms_lob.open(v_lobloc, dbms_lob.lob_readwrite); while v_offset < v_amount loop dbms_lob.read(v_blob_data, v_sub_length, v_offset, v_sub_blob); --把读到的内容放到v_sub_blob中 dbms_lob.writeappend(v_lobloc, --DBMS_LOB.GETLENGTH(v_sub_blob), length(v_sub_blob), v_sub_blob); --写入v_lobloc,该变量已经在之前和sql语句绑定 v_offset := length(v_sub_blob) + v_offset; --游标移动 v_err_msg := length(v_lobloc); end loop; else dbms_lob.writeappend(v_lobloc, v_amount, v_blob_data); --若是小鱼32766直接写入 end if; commit; dbms_lob.close(v_lobloc); exception when others then p_msg := sqlcode || sqlerrm; --p_msg := v_err_msg; rollback; end; 

调用java代码

public static void main(String[] args) { final Connection srcConn = DbUtil.getOracleConnection("c##sjzjy", "sjzjy", "192.168.23.60", "orcl"); final QueryRunner srcOracle = new QueryRunner(); final Connection wsConn = DbUtil.getOracleConnection("c##sjzjy", "sjzjy", "192.168.23.60", "orcl"); try { srcOracle.query(srcConn, " select img from a where id = 1 ", new ResultSetHandler<Img>(){ @Override public Img handle(ResultSet rs) throws SQLException { while(rs.next()) { Blob blob = rs.getBlob("IMG"); try { String img = new String(blob.getBytes((long)1, (int)blob.length()), "ISO8859-1"); // String sql = "insert into a(img) values(?) "; // PreparedStatement stmt = wsConn.prepareStatement(sql); // stmt.setBytes(1, img.getBytes("ISO8859-1")); // stmt.executeUpdate(); String sql = "call write2blob(?,?,?)"; CallableStatement ps = wsConn.prepareCall(sql); ps.setInt(1, 8); //ps.setBlob(2, blob); ps.setBytes(2, img.getBytes("ISO8859-1")); ps.registerOutParameter(3, Types.VARCHAR); ps.execute(); String str = ps.getString(3); System.out.println(str); } catch (Exception e) { e.printStackTrace(); } } return null; }}); } catch (Exception e) { e.printStackTrace(); } } 

会在控制台输出异常编码和异常信息了

oracle存储过程获取异常信息码和异常信息相关推荐

  1. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  2. oracle存储过程 取时间格式,Oracle存储过程获取YYYY-MM-DD的时间格式

    环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQLgt; select sysdate fro 环境:Oracle 10g,11 ...

  3. php yyyymmddhh24mi,Oracle存储过程获取YYYY-MM-DD的时间格式

    环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQLgt; select sysdate fro 环境:Oracle 10g,11 ...

  4. java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)

    oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数. 下面是详细情况说明: 一:无返回值的存储过程调用 存储过程: creat ...

  5. oracle 存储过程获取当前日期

    表名LOAD_PL_FULL_LOG 表字段S_TIME 字段类型date 格式:YYYY-MM-DD HH24:MI:SS 需要这样写 select *from LOAD_PL_FULL_LOGwh ...

  6. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  7. oracle如何获取异常,ORACLE-函数异常处理(EXCEPTION)

    当存储过程引发异常时,可以使用以下代码获取异常并将异常更新到特定字段,这在检查数据时方便检查数据抛出异常. WHEN OTHERS THEN --ROLLBACK; --获取异常信息 V_ERRCOD ...

  8. oracle如何获取异常,Oracle专题13之异常错误处理

    异常:是程序在正常执行过程中发生的未预料的事件. b.什么是异常处理? 异常处理是为了提高程序的健壮性,使用异常处理部分可以有效地解决程序正常执行过程中可能出现的各种错误,使得程序正常运行. c.异常 ...

  9. oracle异常抛出,ORACLE 存储过程异常捕获并抛出

    for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...

最新文章

  1. [Codeforces50C]Happy Farm 5 凸包
  2. 第二篇:数据可视化 - 基本API
  3. Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
  4. 收藏!这 10 篇硬核论文,让你宅家也能更了解图神经网络
  5. MySQL8.0.16主从同步
  6. JAVA面试要点007---equals和==的区别小结
  7. 关于Block的个人总结
  8. C语言家谱管理程序,C语言实现家谱管理
  9. 【毕业寄语】我们不缺少鼓励但却缺少了批评
  10. 简单java程序_简单的Java程序
  11. CSS让图片垂直居中的几种技巧
  12. 从来都是少数决定多数
  13. C语言的那些小秘密之【内存分配】
  14. 表面肌电信号(sEMG)介绍
  15. 医疗保险,公积金、养老、生育、工伤、失业保险
  16. vim学习笔记-tags用法
  17. opencv 编译时出现的一个神奇bug,关于python,99%,链接
  18. java小组的队名,霸气小组队名口号大全
  19. 案例:可视化分析 + 预测模型,锁定影响产品良率的根因!
  20. 抢票显示服务器失败是什么原因,抢票网站的手机核验失败原因

热门文章

  1. QT实现音乐的大小可视化为动画条
  2. QT的QStyleOption类的使用
  3. C/C++语言堆栈指引
  4. r语言mvstats包_R语言交互式可视化包CanvasXpress
  5. php动态写入vue,Vue自定义动态组件使用详解
  6. 45.JVM调优策略、常见问题:内存泄漏(年老代堆空间被占满、持久代被占满、堆栈溢出、线程堆栈满、系统内存被占满)优化方法:优化目标、优化GC步骤、优化总结;案例分析(公司系统参数、网上给的配置参数)
  7. git常用命令(克隆、分支、tag标签、推送、日志查看,常用命令总结)、将本地代码第一次提交到远程git仓库、过滤掉不提交的内容
  8. js中的window.onload和jquery中的load区别的讲解
  9. exp-imp实现oracle不同表空间的迁移
  10. 将虚拟机的版本改为1.6的方法