ORA-01722:当在单引号中插入十进制数时无效



我得到错误ORA-01722:无效号码与以下查询:

insert into foo (id, some_number) values('id_01', '8.9');

到目前为止我发现了什么:

  1. 我可以运行查询如果我删除单引号,如:

    insert into foo (id, some_number) values('id_01', 8.9);

  2. 或者如果我改变。To,例如:

    insert into foo (id, some_number) values('id_01', '8,9');

我正在使用Oracle数据库

有趣的是:我位于西班牙,那里的十进制数字是用,而不是。我团队中的另一个开发人员,不在西班牙,可以在第一个查询中插入这些值(使用单引号和。),这使我认为这可能是由于某些系统属性。我的计算机语言是英语,macOS Monterey 12.5.1

表:FOO

Columns
NAME            DATA TYPE           NULL  DEFAULT    COMMENTS
*ID             VARCHAR2(20 BYTE)   No
SOME_NUMBER    NUMBER(3,1)         Yes

看起来像是国家语言支持的问题,即NLS_NUMERIC_CHARACTERS

SQL> create table foo (id varchar2(20), some_number number(3, 1));
Table created.
SQL> insert into foo(id, some_number) values ('id_01', '8.9');
insert into foo(id, some_number) values ('id_01', '8.9')
*
ERROR at line 1:
ORA-01722: invalid number

失败(正如你已经知道的)。如果nls_numeric_characters被设置为接受

  • 点作为十进制字符和
  • 逗号作为组分隔符,

then itworks:

SQL> alter session set nls_numeric_characters = '.,';
Session altered.
SQL> insert into foo(id, some_number) values ('id_01', '8.9');
1 row created.
SQL>

最新更新