为什么在数据库中插入varchar2可以工作?

时间:2014-07-22 10:56:17

标签: sql oracle oracle11g oracle-sqldeveloper

我不明白如何将varchar2数据插入到数据类型为number的列中。

考虑以下查询序列:

create table aniket.test(id number);

insert into aniket.test(id) 
values ('1');

select * from aniket.test;

虽然我使用引号但它工作正常。它是如何工作的? varchar2内部转换为数字吗?

2 个答案:

答案 0 :(得分:4)

是的,Oracle支持隐式数据转换:Data Conversion (12.1 documentation)

答案 1 :(得分:1)

它基于您的nls参数。例如:

SQL> show parameter NLS_NUMERIC_CHARACTERS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_numeric_characters               string      ,
SQL> ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ",."
  2  /

Session altered.

SQL> create table ttt(
  2    id number
  3  );

Table created.

SQL> insert into ttt values('57,4');

1 row created.

SQL> insert into ttt values('27.93');
insert into ttt values('27.93')
                       *
ERROR at line 1:
ORA-01722: invalid number

正如您所看到的,oracle无法隐式转换输入,输入必须是数字。所以让我们调整我们的nls参数:

SQL> ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ".,"
  2  /

Session altered.

SQL> insert into ttt values('27.93');

1 row created.

SQL> select id from ttt;

        ID
----------
      57.4
     27.93

这是对oracle隐式转换的简要介绍。有关详情,请查看this blogoracle documentations