我不明白如何将varchar2
数据插入到数据类型为number
的列中。
考虑以下查询序列:
create table aniket.test(id number);
insert into aniket.test(id)
values ('1');
select * from aniket.test;
虽然我使用引号但它工作正常。它是如何工作的? varchar2
内部转换为数字吗?
答案 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 blog和oracle documentations