oracle01722非数字转换,oracle - SQL错误“ORA-01722:无效的数字”

oracle01722非数字转换,oracle - SQL错误“ORA-01722:无效的数字”oracle SQL 错误 ORA 01722 无效的数字 一个非常容易的人 以下插页给了我 ORA 01722 无效的号码 为什么 INSERT INTO CUSTOMER VALUES 1 MALADY Claire 27 Smith St

大家好,我是讯享网,很高兴认识大家。

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

小讯
上一篇 2025-04-08 19:11
下一篇 2025-01-26 20:58

相关推荐

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