如何利用Oracle命令解决函数运行错误
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,1 问题自定义了一个 Oracle 函数。编译正常;使用 PL/SQL Developer 的 Test 窗口模式,测试通过。但 Java 直接调用失败;使用 PL/SQL Developer 的 S
千家信息网最后更新 2025年01月22日如何利用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安全错误
数据库的锁怎样保障安全
目前网络技术
广西收费软件开发
焦作思启网络技术有限公司
linux用哪个软件开发
日本软件开发的流程
网络安全突破slogan
互联网贷款与金融科技关系
数据库安全基准
广房网络技术有限公司电话
数据库结构设计属于什么阶段
上海良将网络技术怎么样
字典服务器
绝地求生2未来之役有几个服务器
淄博直播软件开发解决方案
法制与网络安全主题班会
怎么清理微信文档及数据库
bim网络安全
服务器错误33399
新时代的网络及网络安全
数据库级联多表更新
新世界美西哪个服务器人多
ER设计数据库的步骤
分布式软件开发架构
网络安全的十大应用场景
服务器怎么安装wps软件
阿里云端服务器有哪些
指游网络技术有限公司
保密网络安全防范措施
怀柔区软件开发供应
服务器spt-aki不可用