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
我正在执行一个 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