错误描述ERROR: invalid input syntax for integer: "aa"LINE 1: select nvl2('aa',1,2); ^********** Error **********ERROR: invalid input syntax for integer: "aa"SQL state: 22P02Character: 13
解决方案
通过自行扩充一个自定义的public.nvl2即可解决数据类型问题,同时用户无需要调整原有Oracle已经开发好的程序或存储过程。create or replace function public.nvl2(p_v1 string, p_v2 anyelement, p_v3 anyelement) return anyelement as
declare
v_v1 int;
begin
IF p_v1 NOTNULL THEN
v_v1=1;
ELSE
v_v1=null;
END IF;
return pg_catalog.nvl2(v_v1, p_v2, p_v3);
end;
select nvl2('aa',1,2); --此时运行的应该是上面新建立的public.nvl2
select nvl2(100,1,2); --此时运行的应该是系统原生的pg_catalog.nvl2
select nvl2(null,1,2); --此时运行的应该是系统原生的pg_catalog.nvl2
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题描述:
ERROR: invalid input syntax for integer: "aa"
,发生在SQL语句的第13个字符位置。此错误提示表明尝试将字符串"aa"转换为整数时失败。问题分析:
ERRCODE_INVALID_DATETIME_FORMAT
类别,但根据错误信息,更准确地应归类为数据类型不匹配问题。具体原因是SQL语句中尝试对非数字字符("aa")执行整数类型的处理操作。解决方案:
自定义函数绕过:用户已提供了一个解决方案,即创建一个自定义函数public.nvl2
,该函数能够处理不同数据类型的输入,并避免直接的类型转换错误。这个方法通过判断输入值是否为NULL来决定返回哪个值,有效绕过了原始的类型检查问题。
create or replace function public.nvl2(p_v1 string, p_v2 anyelement, p_v3 anyelement)
returns anyelement as $$
declare
v_v1 int;
begin
IF p_v1 IS NOT NULL THEN
v_v1 := 1;
ELSE
v_v1 := null;
END IF;
return pg_catalog.nvl2(v_v1::int, p_v2, p_v3);
end;
$$ language plpgsql;
select public.nvl2('aa', 1, 2); -- 使用新函数处理字符串输入
select public.nvl2(100, 1, 2); -- 同样适用于整数
select public.nvl2(null, 1, 2); -- 处理NULL值
注意事项:
public.nvl2
可能会与系统内置函数产生命名冲突或行为差异,需谨慎使用并充分测试。进一步支持:
通过上述步骤,用户可以针对性地解决当前遇到的SQL执行错误,并优化代码以减少未来类似问题的发生。