我在一个过程中查询到一条记录,该过程返回“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/