如何利用Oracle命令解决函数运行错误
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,1 问题自定义了一个 Oracle 函数。编译正常;使用 PL/SQL Developer 的 Test 窗口模式,测试通过。但 Java 直接调用失败;使用 PL/SQL Developer 的 S
千家信息网最后更新 2025年11月07日如何利用Oracle命令解决函数运行错误
1 问题
自定义了一个 Oracle 函数。编译正常;使用 PL/SQL Developer 的 Test 窗口模式,测试通过。但 Java 直接调用失败;使用 PL/SQL Developer 的 SQL 窗口模式,执行失败。

没有有效的错误提示信息。
2 分析
肯定是函数本身有问题,我们要使用有效的工具来定位出问题。
在 Oracle 函数中,加入异常处理。
异常处理 (EXCEPTION) 可用来处理正常执行过程中未预料的事件。如果 PL/SQL 程序块产生异常,但没有指定如何处理时 , 程序就会自动终止。
2.1 Oracle 异常错误类型
| 异常错误类型 | 说明 |
|---|---|
| 预定义 | 有 24 个。这种异常,无需在程序中定义, ORACLE 会自动引发 。 |
| 非预定义 | 其他的 ORACLE 标准错误 。 这种异常,需要在程序中定义,然后由 ORACLE 引发 。 |
| 用户定义 | 编程者定义的非正常情况。这种异常,需要我们在程序中定义,然后显式引发。 |
2.2 预定义异常
| 错误码 | 错误名称 | 说明 |
|---|---|---|
| ORA-0001 | Dup_val_on_index | 违反唯一性限制。 |
| ORA-0051 | Timeout-on-resource | 等待资源时发生超时。 |
| ORA-0061 | Transaction-backed-out | 发生死锁,事务被撤消。 |
| ORA-1001 | Invalid-CURSOR | 试图使用一个无效的游标。 |
| ORA-1012 | Not-logged-on | 没有连接到 ORACLE。 |
| ORA-1017 | Login-denied | 无效的用户名/口令。 |
| ORA-1403 | No_data_found | SELECT INTO 没有找到数据。 |
| ORA-1422 | Too_many_rows | SELECT INTO 返回多行。 |
| ORA-1476 | Zero-divide | 试图除以零。 |
| ORA-1722 | Invalid-NUMBER | 转换为数字失败。 |
| ORA-6500 | Storage-error | 内存不够,引发内部错误。 |
| ORA-6501 | Program-error | 内部错误。 |
| ORA-6502 | Value-error | 转换或截断错误。 |
| ORA-6504 | Rowtype-mismatch | 宿主游标变量与 PL/SQL 变量存在不兼容行类型。 |
| ORA-6511 | CURSOR-already-OPEN | 试图打开一个已处于打开状态的游标。 |
| ORA-6530 | Access-INTO-null | 试图为 null 对象的属性赋值。 |
| ORA-6531 | Collection-is-null | 试图将 Exists 以外的集合 (collection) 方法应用于一个 null pl/sql 表上或 varray 上。 |
| ORA-6532 | Subscript-outside-limit | 对嵌套或 varray 索引的引用,超出了声明范围以外。 |
| ORA-6533 | Subscript-beyond-count | 对嵌套或 varray 索引的引用,大于集合中元素的个数。 |
2.3 异常处理语句
EXCEPTION WHEN first_exception THEN WHEN second_exception THEN WHEN OTHERS THEN END;2.4 DBMS_OUTPUT
DBMS_OUTPUT 可用于调试 PL/SQL 程序。它有这些常用方法:
| 方法 | 说明 |
|---|---|
| put | 把内容写入内存,直到 put_line 时,再一次性输出。 |
| put_line | 输出。 |
| new_line | 换行。 |
2.5 错误处理对象
- sqlcode:错误码。
- sqlerrm:错误信息。
结合以上内容,我们就可以在函数中,写出这样的异常输出语句:
exception when others then DBMS_OUTPUT.put_line('sqls :' || sqls); DBMS_OUTPUT.put_line('sqlcode :' || sqlcode); DBMS_OUTPUT.put_line('sqlerrm : ' || sqlerrm);3 解决
编写测试函数命令,并在 PL/SQL Developer 中的命令窗口中,执行以下命令:
set serveroutput on;declare r varchar2(32);beginr:=函数名(参数 1,参数 2,...);end;
注意: 如果想要在 PL/SQL中看到 DBMS_OUTPUT 输出,就必须设置 serveroutput 参数为 on。
是不是发现错误信息啦,顺藤摸瓜就可以找到原因啦O(∩_∩)O~
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
错误
函数
程序
处理
内容
输出
命令
信息
参数
方法
游标
类型
问题
有效
内存
变量
对象
模式
用户
索引
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
建立数据库新建连接
网络安全学习手册
如何卸载万象数据库
女生网络技术
一个视频搞懂服务器
世界数据库众生相
莱芜pc软件开发哪家好
关系型数据库表设计
数据库建立联合主键
视频联网管理服务器
工信部 网络安全局
开源软件开发与应用能力认证
软件开发项目管理软件有哪些
江西服务器虚拟化系统云服务器
计算机网络技术的试卷
2018网络安全周宣传资料
天津虚拟主机租用云空间云服务器
疫情防控人口信息数据库
力控如何把数据写入数据库
重庆技术软件开发服务公司
公安部网络安全保卫局二处
一次性更改所有链接数据库
wow晴日峰服务器
L2通信协议栈软件开发
公安内部网络安全简报
快手服务器处于维修状态
媒体服务器连接超时怎么解决
我的世界2b2t服务器最早的样子
阿里新开发的云服务器
安卓驱动软件开发是什么