SQL错误“;ORA-01722:无效编号“;
对某人来说很容易, 下面的插页为我提供了 ORA-01722:无效号码 为什么? 这是因为: 您执行了一条SQL语句,试图将字符串转换为 号码,但没有成功 如中所述:SQL错误“;ORA-01722:无效编号“;,sql,oracle,plsql,casting,type-conversion,Sql,Oracle,Plsql,Casting,Type Conversion,对某人来说很容易, 下面的插页为我提供了 ORA-01722:无效号码 为什么? 这是因为: 您执行了一条SQL语句,试图将字符串转换为 号码,但没有成功 如中所述: 要解决此错误,请执行以下操作: 仅限包含数值的数值字段或字符字段 可用于算术运算。确保所有表达式 对数字进行评估 当试图将字符串转换为数字,而该字符串无法转换为数字时,会发生ORA-01722错误 在没有看到表定义的情况下,看起来您正试图将值列表末尾的数字序列转换为数字,而分隔它的空格引发了此错误。但根据您给我们的信息,它可
当试图将字符串转换为数字,而该字符串无法转换为数字时,会发生ORA-01722错误
在没有看到表定义的情况下,看起来您正试图将值列表末尾的数字序列转换为数字,而分隔它的空格引发了此错误。但根据您给我们的信息,它可能发生在任何字段上(第一个字段除外)。当您尝试将非数字值插入数据库中的数字列时,出现此错误,您的最后一个字段可能是数字字段,并且您尝试将其作为数据库中的字符串发送。检查您的最后一个值。假设电话号码定义为
number
,则空格不能转换为数字:
create table telephone_number (tel_number number);
insert into telephone_number values ('0419 853 694');
以上给了你一个答案
ORA-01722:无效号码
这里有一个解决方法。删除非数字字符,然后将其转换为数字
cast(regexp_replace('0419 853 694', '[^0-9]+', '') as number)
在我的例子中,转换错误出现在我为表创建的基于函数的索引中 正在插入的数据正常。我花了一段时间才发现实际的错误来自于错误索引
如果Oracle能够在这种情况下给出更准确的错误消息,那就太好了。您可以始终使用TO_NUMBER()函数来删除此错误。这可以作为插入到员工电话号码值中的内容(TO_NUMBER('0419 853 694'))如果执行
插入到…select*from…
语句,也很容易得到“Invalid Number”错误
假设您有一个名为FUND\u ACCOUNT
的表,它有两列:
AID_YEAR char(4)
OFFICE_ID char(5)
假设您希望将OFFICE_ID修改为数字,但表中存在行,更糟糕的是,其中一些行的OFFICE_ID值为“”(空白)。在Oracle中,如果表中有数据,则无法修改列的数据类型,并且将“”转换为0需要一些技巧。因此,下面介绍了如何执行此操作:
Create table FUND\u ACCOUNT2 AS SELECT*FROM FUND\u ACCOUNT;
Delete from FUND_ACCOUNT;
alter table FUND\u ACCOUNT MODIFY(办公室ID号);
插入到FUND\u ACCOUNT SELECT*FROM FUND\u ACCOUNT2
,您将得到“ORA-01722 Invalid Number”错误。为了将“”(空白)OFFICE\u ID转换为0,您的INSERT语句必须如下所示:插入基金账户(援助年,办公室ID)选择援助年,从基金账户2解码(办公室ID',0,办公室ID;
ORA-01722错误非常简单。根据:
我们尝试将字符串显式或隐式转换为数字,但失败了
但是,问题通常在一开始并不明显。帮助我排除故障、查找并修复问题。提示:查找将字符串显式或隐式转换为数字的位置。(我的代码中有
NVL(number\u field,'string')
。如果出现无效数字错误,请尝试此操作
在这个
a、 emplid是数字,b.emplid是一个varchar2,所以如果要转换其中一条边
where to_char(a.emplid)=b.emplid也可以是:
SELECT t.col1, t.col2, ('test' + t.col3) as test_col3
FROM table t;
在oracle中,用于连接的运算符是|
而不是+
在这种情况下,您会得到:
ORA-01722:无效数字…
对于字符串列值,Oracle会进行自动String2number转换!但是,对于SQL中的文本比较,输入必须明确地分隔为字符串:相反的转换数字2String不会自动执行,不在SQL查询级别
我有一个疑问:
从acc_num介于1001000和1001999之间的帐户中选择max(acc_num);
那一个出现了一个问题:错误:ORA-01722:无效号码
我刚刚包围了“数值”值,使它们成为“字符串”,只是将它们显式分隔为:
从acc_num介于“1001000”和“1001999”之间的帐户中选择max(acc_num);
…瞧,它返回了预期的结果
编辑:
事实上:我的表中的colacc_num
被定义为String
。虽然不是数字,但报告了无效数字。字符串数字的显式定界解决了问题
另一方面,Oracle可以将字符串视为数字。因此可以对字符串应用数字运算/函数,并且这些查询可以工作:
从表中选择最大值(字符串列)
从表中选择string_column,其中string_column介于“2”和“z”之间
从字符串列“1”所在的表中选择字符串列
从string\u column所在的表中选择string\u column这也发生在我身上,但问题实际上不同:文件编码
SELECT t.col1, t.col2, ('test' + t.col3) as test_col3
FROM table t;