sql - 为什么我的 CAST 到浮点数会在 Oracle 中给出“无效数字”错误?
问题描述
我有以下示例:
create table test_1(c1 float);
insert into test_1 values(cast('000000000000001425.6' as float));
当我想插入值时,我有
ORA-01722: 无效号码
请问我怎样才能忽略这个错误?
解决方案
最可能的原因是您的会话nls_numeric_characters
设置,.
为表示逗号是小数分隔符,点是千位分隔符。
varchar2
如果您真的必须接受作为输入,一种简单的解决方法是首先应用translate
,将所有点转换为逗号,反之亦然。
在下图中,首先我使用一个alter session
语句使我的会话表现得像你的一样。然后我会展示你现在在做什么,最后我会展示如何修复它——注意这个translate
函数:
alter session set nls_numeric_characters = ',.';
Session altered.
create table test_1(c1 float);
Table TEST_1 created.
insert into test_1 values(cast('000000000000001425.6' as float));
Error starting at line : 10 in command -
insert into test_1 values(cast('000000000000001425.6' as float))
Error report -
ORA-01722: invalid number
insert into test_1 values(cast(translate('000000000000001425.6', ',.', '.,')
as float));
1 row inserted.
推荐阅读
- python - 运行创建许多文件的程序时偶尔返回“权限错误”
- sql - 如何解决此错误“除以零”
- angular - 使用 Angular 6、angular-oauth2-oidc 和 IdentityServer 3 返回 URL
- visual-studio-2017 - SSAS 表格 - 模型中的数据,但网格为空白
- google-chrome - 在 Chrome 中启用 MathML
- android - 在 Xamarin 中的登录按钮上实现 MVVM
- scalamock - 使用 scalamock 模拟在构造函数中“工作”的对象
- c# - C#在当前终端执行shell命令
- c# - WPF - 显示不同颜色的文本块
- flutter - 颤动下拉菜单没有布局