SQL Plus:插入数值,其周围带有单引号会出错

时间:2017-04-25 07:29:55

标签: sql oracle sql-insert sqlplus quotes

我的一位同事使用Oracle SQL Developer创建了一个带INSERT INTO查询的导出。这个导出在每个值周围放置了单引号,而不仅仅是VARCHAR。

因此,我们假设我们有一个包含这些列的简单表格(其中包括):

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 Developer中插入它:

-- 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来执行包含insert-statements的.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文件)?

1 个答案:

答案 0 :(得分:3)

您可以在数字值周围使用单引号。由于小数点字符而发生错误。您需要更改可以完成的小数点字符,如下所示。

class PaddedTextfield: UITextField {
var horizontalInsetValue: CGFloat = 0
var verticalInsetValue: CGFloat = 0

override func textRect(forBounds bounds: CGRect) -> CGRect {
  return bounds.insetBy(dx: horizontalInsetValue, dy: verticalInsetValue)
}

override func editingRect(forBounds bounds: CGRect) -> CGRect {
   return bounds.insetBy(dx: horizontalInsetValue , dy: verticalInsetValue)
}

override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
   return bounds.insetBy(dx: horizontalInsetValue, dy: verticalInsetValue)
}
}