我的同事使用Oracle SQL开发人员创建了一个INSERT INTO
查询的导出。此导出的单语引号围绕着每个值,而不仅仅是Varchars。
因此,假设我们有一个简单的表包含这些列(以及其他列(:
SOME_TEXT VARCHAR2(256 BYTE)
SOME_NUMBER NUMBER(15,2)
导出具有这样的INSERT INTO
:
Insert into MY_TABLE (SOME_TEXT,SOME_NUMBER) values ('test text','123,45');
您可能会注意到有关小数值('123,45'
(的两件事:
- 它周围有单语
- 它有一个逗号而不是dot(我的同事的数据库是荷兰语,我的是英语(
第二个很容易修复,我可以将其插入Oracle SQL开发人员中:
-- dot as thousand separator, comma as decimal point
alter SESSION set NLS_NUMERIC_CHARACTERS = '.,';
Insert into MY_TABLE (SOME_TEXT,SOME_NUMBER) values ('test text','123,45');
-- All other insert queries
alter SESSION set NLS_NUMERIC_CHARACTERS = ',.';
效果很好。
但是,某些.sql
文件很大,无法在SQL开发人员中打开。因此,我想使用SQL Plus执行包含插入仪的.sql
文件。
但是,即使更改了NLS_NUMERIC_CHARACTERS
,由于数字值周围的单个引号,我当前在SQL Plus中遇到以下错误:
SQL> @"C:mypathtest_insert_statement.sql"
values ('test text','123,45')
*
ERROR at line 2:
ORA-01722: invalid number
我看到了两个可能的解决方案,但是我不知道是否可以:
- 是否有一种方法可以允许SQL Plus中的数值围绕Oracle数据库中的数值?
- 或者是否有一种方法可以导出一个没有单语引号的数据库,即Oracle SQL开发人员中的数字值(那么我可以让我的同事生成另一个
.sql
文件(?
您可以在数字值周围使用单个引号。由于小数点特征,发生了误差。如下所示,您需要更改可以完成的小数点字符。
SQL> create table tbl1(
SOME_TEXT VARCHAR2(256 BYTE),
SOME_NUMBER NUMBER(15,2)
); 2 3 4
Table created.
SQL> alter SESSION set NLS_NUMERIC_CHARACTERS = ',.';
Session altered.
SQL> Insert into tbl1 (SOME_TEXT,SOME_NUMBER) values ('test text','123,45');
1 row created.
SQL> select * from tbl1;
SOME_TEXT SOME_NUMBER
------------- -----------
test text 123,45