oracle - SQL错误“ORA-01722:无效的数字”
一个非常容易的人,以下插页给了我
ORA-01722:无效的号码
为什么?
INSERT INTO CUSTOMER VALUES (1,'MALADY','Claire','27 Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (2,'GIBSON','Jake','27 Smith St Caulfield','0415 713 598');
INSERT INTO CUSTOMER VALUES (3,'LUU','Barry','5 Jones St Malvern','0413 591 341');
INSERT INTO CUSTOMER VALUES (4,'JONES','Michael','7 Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (5,'MALADY','Betty','27 Smith St Knox','0418 418 347');
12个解决方案
100 votes
尝试将字符串转换为数字时,会发生ORA-01722错误,并且该字符串无法转换为数字。
在没有看到您的表定义的情况下,您似乎正在尝试将值列表末尾的数字序列转换为数字,并且分隔它的空格会抛出此错误。 但根据你给我们的信息,它可能发生在任何领域(除了第一个)。
Aaron answered 2019-05-18T17:53:32Z
21 votes
假设电话号码定义为NUMBER,则空格无法转换为数字:
create table telephone_number (tel_number number);
insert into telephone_number values ('0419 853 694');
以上给你一个
ORA-01722:无效的号码
hol answered 2019-05-18T17:54:06Z
14 votes
这是解决问题的一种方法。 删除非数字字符,然后将其转换为数字。
cast(regexp_replace('0419 853 694', '[^0-9]+', '') as number)
gmlacrosse answered 2019-05-18T17:54:31Z
10 votes
当您尝试将非数字值插入db中的数字列时出现此错误,似乎您的最后一个字段可能是数字,并且您尝试将其作为字符串发送到数据库中。 检查你的最后一个价值
Freelancer answered 2019-05-18T17:54:56Z
7 votes
那么它也可以是:
SELECT t.col1, t.col2, ('test' + t.col3) as test_col3
FROM table t;
在oracle使用串联的地方运营商ORA-01722: invalid number ...而不是+。
在这种情况下,你得到:ORA-01722: invalid number ...
Lazar Lazarov answered 2019-05-18T17:55:35Z
6 votes
这是因为:
您执行了一个尝试将字符串转换为a的SQL语句 号码,但没有成功。
如下所述:
Oracle / PLSQL:ORA-01722错误。
要解决此错误:
仅包含数字值的数字字段或字符字段 可用于算术运算。 确保所有表达式 评估数字。
Mahmoud Gamal answered 2019-05-18T17:56:26Z
2 votes
在我的情况下,转换错误是在我为表创建的基于功能的索引中。
插入的数据没问题。 我花了一段时间才弄清楚实际的错误是来自错误指数。
如果Oracle在这种情况下可以提供更准确的错误消息,那就太好了。
iTake answered 2019-05-18T17:57:05Z
2 votes
我有这个问题:
select max(acc_num) from ACCOUNTS where acc_num between and ;
那个问题出现了:acc_num
我刚刚包围了“数值”值,使它们成为acc_num,并使它们明确分隔:
acc_num
......并且瞧:它返回了预期的结果。
编辑:事实上:我表中的col acc_num定义为String.虽然不是数字,但报告了invalid number。 并且字符串数字的显式分隔解决了问题。
另一方面,Oracle可以将字符串视为数字。 所以数值运算/函数可以应用于字符串,这些查询工作:
从TABLE中选择max(string_column);
从TABLE中选择string_column,其中string_column在'2'和'z'之间;
从TABLE中选择string_column,其中string_column>'1';
从TABLE中选择string_column,其中string_column< ='b';
Franta answered 2019-05-18T17:58:49Z
1 votes
如果您执行INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;语句,也很容易得到“无效数字”错误。
假设您有一个名为INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;的表,它有两列:
AID_YEAR char(4)
OFFICE_ID char(5)
并且假设您要将OFFICE_ID修改为数字,但表中存在现有行,更糟糕的是,其中一些行的OFFICE_ID值为''(空白)。 在Oracle中,如果表有数据,则无法修改列的数据类型,并且需要一些技巧将''转换为0.所以这里是如何做到的:
创建一个重复的表:INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;
删除原始表中的所有行:INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;
一旦原始表中没有数据,请更改其OFFICE_ID列的数据类型:INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;
但接下来是棘手的部分。 因为某些行包含空白OFFICE_ID值,如果您执行简单的INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;,您将收到“ORA-01722无效数字”错误。 为了将''(空白)OFFICE_ID转换为0,你的insert语句必须如下所示:
INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;
Frank Staheli answered 2019-05-18T18:00:05Z
-1 votes
如果您的号码错误无效,请尝试此操作
在这a.emplid是数字,b.emplid是varchar2,所以如果你要转换其中一个边
其中to_char(a.emplid)= b.emplid
Jay answered 2019-05-18T18:00:47Z
-2 votes
ORA-01722错误非常简单。 根据Tom Kyte的说法:
我们试图明确地或隐式地将字符串转换为数字,但它失败了。
但是,问题始终是不明显的。 此页面帮助我排除故障,查找并修复了我的问题。 提示:查找显式或隐式将字符串转换为数字的位置。 (我的代码中有NVL(number_field, 'string')。)
Baodad answered 2019-05-18T18:01:29Z
-4 votes
您始终可以使用TO_NUMBER()函数来删除此错误。这可以包含为INSERT INTO员工phone_number值(TO_NUMBER('0419 853 694');
Harshit Gupta answered 2019-05-18T18:01:56Z

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24543.html