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

我看到了两种可能的解决方案,但我不知道是否可行:

  1. 有没有办法在 SQL Plus for Oracle 数据库中允许在数值周围使用单引号?
  2. 或者有没有办法在 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