SQL插入语句中的分号和单引号问题

时间:2017-03-07 07:54:35

标签: oracle oracle10g sqlplus

我正在执行一个SQL脚本,该脚本在名为prod_desc的列中包含空格,分号,单引号,特殊字符等。 我需要从SQLPLUS执行脚本。我在SQLPLUS中设置了以下内容,但是单引号,分号没有被考虑在内。

set sqlblanklines on

例如,请参阅下面的insert语句,分号是在换行符之后。这在执行期间导致错误。我该如何解决这个问题?

SET DEFINE OFF;
Insert into PROD_DESC
   (PROD_NO, PROD_DESC
    )
Values
   ('XYZ', 'test
semicolon test;
'
);

表格结构

CREATE TABLE prod_desc
(
   prod_no     VARCHAR2 (100),
   prod_desc   VARCHAR2 (1000)
);

2 个答案:

答案 0 :(得分:2)

Espace the decmeon:

SET DEF OFF;
Insert into PROD_DESC(PROD_NO, PROD_DESC)
Values('XYZ', 'test semicolon test\;');

答案 1 :(得分:1)

我也喜欢使用q-quote语法。它消除了转义的需要,并使引用引号更容易。

语法是

q'[ <your string> ]'

<Your string>可以包含通常需要转义的引号或任何其他字符。 [实际上可以替换或“配对”字符,例如{}或()。

例如:

SQL> 
SQL> CREATE TABLE prod_desc
  2  (
  3     prod_no     VARCHAR2 (10),
  4     prod_desc   VARCHAR2 (100)
  5  );

Table created.

SQL> 
SQL> SET DEFINE OFF;
SQL> Insert into PROD_DESC
  2     (PROD_NO, PROD_DESC
  3      )
  4  Values
  5     ('XYZ', q'[test
  6  semicolon test
  7  ; ]'
  8  );

1 row created.

SQL> 
SQL> 
SQL> select * from prod_desc;

PROD_NO    PROD_DESC
---------- ----------------------------------------------------------------------------------------------------
XYZ        test
           semicolon test
           ;