SQL Plus:将其周围的单个引号插入数值中,会产生错误



我的同事使用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

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

  1. 是否有一种方法可以允许SQL Plus中的数值围绕Oracle数据库中的数值?
  2. 或者是否有一种方法可以导出一个没有单语引号的数据库,即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

最新更新