SQL Plus : 插入带有单引号的数值会出错
SQL Plus : insert into numeric values with single quotes around them gives error
我的一位同事使用 Oracle SQL Developer 创建了一个包含 INSERT INTO
查询的导出。此导出在每个值周围都加上了单引号,而不仅仅是 VARCHARs。
假设我们有一个简单的 table 包含这些列(以及其他列):
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'
),您可能会注意到两点:
- 它有单引号
- 它有一个逗号而不是一个点(我同事的数据库是荷兰语,我的是英语)
第二个很容易修复,我可以将它插入 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 Developer 中打开。因此,我想使用 SQL Plus 来执行包含插入语句的 .sql
文件。
但是,即使更改了 NLS_NUMERIC_CHARACTERS
,由于数值周围的单引号,我目前在 SQL Plus 中收到以下错误:
SQL> @"C:\my\path\test_insert_statement.sql"
values ('test text','123,45')
*
ERROR at line 2:
ORA-01722: invalid number
我看到了两种可能的解决方案,但我不知道是否可行:
- 有没有办法在 SQL Plus for Oracle 数据库中允许在数值周围使用单引号?
- 或者有没有办法在 Oracle SQL Developer 中导出不带单引号的数据库(然后我可以让我的同事生成另一个
.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
我的一位同事使用 Oracle SQL Developer 创建了一个包含 INSERT INTO
查询的导出。此导出在每个值周围都加上了单引号,而不仅仅是 VARCHARs。
假设我们有一个简单的 table 包含这些列(以及其他列):
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'
),您可能会注意到两点:
- 它有单引号
- 它有一个逗号而不是一个点(我同事的数据库是荷兰语,我的是英语)
第二个很容易修复,我可以将它插入 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 Developer 中打开。因此,我想使用 SQL Plus 来执行包含插入语句的 .sql
文件。
但是,即使更改了 NLS_NUMERIC_CHARACTERS
,由于数值周围的单引号,我目前在 SQL Plus 中收到以下错误:
SQL> @"C:\my\path\test_insert_statement.sql"
values ('test text','123,45')
*
ERROR at line 2:
ORA-01722: invalid number
我看到了两种可能的解决方案,但我不知道是否可行:
- 有没有办法在 SQL Plus for Oracle 数据库中允许在数值周围使用单引号?
- 或者有没有办法在 Oracle SQL Developer 中导出不带单引号的数据库(然后我可以让我的同事生成另一个
.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