oracle - 在Oracle中处理错误号码

标签 oracle error-handling oracle11g

我在一个过程中查询到一条记录,该过程返回“ORA-01722:无效编号”。这是因为该字段实际上是文本,并且在一条记录上有人输入了“.-11”而不是“-.11”,然后我们试图将其添加到另一个数字中。

当我知道可能有一个错误的数字时,如何处理查询?我想在字段中显示NULL或“错误”或其他内容,而不是跳过它(不好)或使查询失败(更糟)。

查询可能类似于以下内容,所有字段均定义为文本:

SELECT Tbl_ID
     , Tbl_InValue
     , Tbl_OutValue
     , (Tbl_InValue + Tbl_OutValue)/2 Tbl_Avg
From MyTable

如果我有如下表值
Tbl_ID    Tbl_InValue    Tbl_OutValue
1          .5             3.2
2          1.1            .-11
3          -3             .5

我想输出类似
Tbl_ID    Tbl_InValue    Tbl_OutValue   Tbl_Avg
1          .5             3.2            1.85
2          1.1            .-11           ERROR
3          -3             .5             -1.25

最佳答案

您可以编写一个函数来执行计算并返回varchar2结果:

create function get_average(in_value in varchar2, out_value in varchar2) return varchar2 is
begin
  return to_char((to_number(in_value) + to_number(out_value)) / 2);
exception
  when others then
    return 'ERROR';
end;

然后在选择中使用它:
select get_average(Tbl_InValue, Tbl_OutValue) from MyTable;

关于oracle - 在Oracle中处理错误号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609633/

相关文章:

oracle - 当 END 后使用 SET SCAN ON 时会引发错误

sql - 如何在 Oracle SQL Developer 中执行超过 100 万次插入查询?

database - 我如何知道 Oracle 中的表是否存在碎片?

asp.net-mvc - CustomErrors on不适用于生产环境

javascript - Javascript 如何解释返回 500?

oracle - 外部数据库上的物化 View 无法在指定时间刷新 - SQL*Net more data from dblink

database - 为什么ora_rowscn发生变化而不更新表

mysql - 组合两个不同的数据集时子查询不返回数据

ios - 在我创建的文件上运行打开时出现错误 13(权限被拒绝)(iOS)

sql - Oracle View 查询,基于一个条件检索数据,但未检索到一行