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

Semicolon and Single Quote Issue in SQL Insert Statements

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

set sqlblanklines on

例如看下面的插入语句,分号在换行之后。这导致执行期间出错。我该如何解决这个问题?

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

Table结构

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

Espace 分号:

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

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

语法是

q'[ <your string> ]'

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

例如:

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
           ;

您可以使用

忽略字符串中的分号
SET SQLTERMINATOR OFF