如何在oracle数据库INSERT STATEMENT中输入“\”之类的特殊字符?

时间:2015-04-29 04:06:45

标签: sql oracle escaping sql-insert

更新: 我刚刚发现问题并非来自反斜杠。问题是单引号问题。我试图插入带有撇号的单词,每当我的列表中有一个单词时,撇号就会被视为单个引号。因此Oracle自动添加反斜杠,即使我在原始插入值中没有反斜杠。

示例:

插入指令(Mot)价值观(' ensuivre');

最初是

插入指令(Mot)价值观(' ensuivre');

有没有办法以不同于围绕值的单引号来处理撇号?

  

原始问题:

     

我想以字符串形式插入反斜杠:

INSERT INTO Dictionnaire (Mot,Definition) VALUES ('abasourdir','v. tr.\\n Ahurir.');
     

有没有办法阻止反斜杠做什么呢   通常会这样做,即:"转义单个字符或符号",和   让DBMS把它当成一个简单的字符串吗?

     

设置关闭;不起作用。

     

谢谢!

4 个答案:

答案 0 :(得分:2)

  

我想在字符串中插入一个反斜杠:INSERT INTO Dictionnaire(Mot,Definition)VALUES('abasourdir','v.tr。\ n Ahurir。');

仅当您将转义字符设置为反斜杠时,反斜杠才能用作转义字符,或者在单个SQL语句中使用 ESCAPE命令。以免您应该能够像任何其他角色一样插入它。

使用单反斜杠两个反斜杠 而不是

例如,我将转义字符设置为设置转义符'\'

SQL> CREATE TABLE t(a number, b VARCHAR2(10));

Table created.

SQL>
SQL> set escape '\'
SQL>
SQL> INSERT INTO t VALUES(1, '\\');

1 row created.

SQL> INSERT INTO t VALUES(2, '\\n');

1 row created.

SQL>
SQL> SELECT * FROM t;

         A B
---------- ----------
         1 \
         2 \n

SQL>
  

有没有办法阻止反斜杠做它通常做的事情,即:“转义单个字符或符号”,并让DBMS将其视为一个简单的字符串?

然后不要使用反斜杠来逃避。将任何其他字符设置为转义字符

例如,我将使用正斜杠作为转义字符而不是反斜杠:

SQL> DROP TABLE t PURGE;

Table dropped.

SQL>
SQL> CREATE TABLE t(a number, b VARCHAR2(10));

Table created.

SQL>
SQL> set escape '/'
SQL>
SQL> INSERT INTO t VALUES(1, '\');

1 row created.

SQL> INSERT INTO t VALUES(2, '\n');

1 row created.

SQL> INSERT INTO t VALUES(2, '/n');

1 row created.

SQL>
SQL> SELECT * FROM t;

         A B
---------- ----------
         1 \
         2 \n
         2 n

SQL>

所以,正如你所看到的,只有正斜杠被用来逃避,而不是反斜杠。

就此而言,你也可以使用任何其他角色逃脱:

SQL> set escape '#'
SQL>
SQL> INSERT INTO t VALUES(1, '\');

1 row created.

SQL> INSERT INTO t VALUES(2, '\n');

1 row created.

SQL> INSERT INTO t VALUES(2, '#n');

1 row created.

SQL>
SQL> SELECT * FROM t;

         A B
---------- ----------
         1 \
         2 \n
         2 n

SQL>

因此,您可以看到'#'被用作转义字符。反斜杠没有影响。

答案 1 :(得分:1)

SQL> CREATE TABLE Dictionnaire(MOT VARCHAR2(20),Definition varchar2(40));

Table created.

Elapsed: 00:00:00.71

如果你想要引号,如果你只想要反斜杠,那么看看其他插页,

SQL> INSERT INTO Dictionnaire (Mot,Definition) VALUES ('abasourdir','v. tr.''\''n Ahurir.');

1 row created.


Elapsed: 00:00:00.01
SQL> select * from Dictionnaire ;

MOT                  DEFINITION
-------------------- ----------------------------------------
abasourdir           v. tr.'\'n Ahurir.

Elapsed: 00:00:00.01


SQL> INSERT INTO Dictionnaire (Mot,Definition) VALUES ('abasourdir','v. tr.\n Ahurir.');

1 row created.

Elapsed: 00:00:00.01
SQL> select * from Dictionnaire ;

MOT                  DEFINITION
-------------------- ----------------------------------------
abasourdir           v. tr.'\'n Ahurir.
abasourdir           v. tr.\n Ahurir.

Elapsed: 00:00:00.01

答案 2 :(得分:1)

  

有没有办法以不同于围绕值的单引号来处理撇号?

INSERT INTO DICTIONNAIRE (Mot) VALUES ('s'ensuivre');

是的,要在一个值中插入单引号,只需加倍。

INSERT INTO DICTIONNAIRE (Mot) VALUES ('s''ensuivre');

答案 3 :(得分:0)

我刚刚发现问题并非来自反斜杠。问题是单引号问题。我正在尝试插入带有撇号的单词,只要我的列表中有一个单词,撇号就会被视为单个引号。因此,即使我在原始插入值中没有反斜杠,Oracle也会自动添加反斜杠。

示例:

插入DICTIONNAIRE(Mot)VALUES('s \'ensuivre');

最初是

插入DICTIONNAIRE(Mot)VALUES('s'ensuivre');

有没有办法以不同于围绕值的单引号来处理撇号?