首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在oracle数据库INSERT语句中输入诸如“\”这样的特殊字符?

如何在oracle数据库INSERT语句中输入诸如“\”这样的特殊字符?
EN

Stack Overflow用户
提问于 2015-04-29 04:06:45
回答 4查看 32.5K关注 0票数 1

更新:我刚刚发现问题不是来自反斜杠。问题是单引号问题。我试图用撇号插入单词,每当我的列表中有撇号时,撇号就被当作单引号对待。因此,Oracle将自动添加反斜杠,即使在原始insert值中没有反斜杠。

示例:

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

插入DICTIONNAIRE (Mot)值(‘s’‘ensuivre);

是否有一种方法来对待撇号与围绕这些值的单一引号不同?

原题: 我想将反斜杠插入为字符串: 在Dictionnaire (Mot,Definition)中插入值(“abasourdir”,“v. tr.\n Ahurir.”); 有没有一种方法可以防止反斜杠做它通常做的事情,即:“转义单个字符或符号”,并让DBMS把它当作一个简单的字符串对待? 开始定义;不工作。 谢谢!

EN

回答 4

Stack Overflow用户

发布于 2015-04-29 05:15:22

我想插入一个反斜杠作为字符串:插入Dictionnaire (Mot,Definition)值('abasourdir','v. tr.\n Ahurir.');

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

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

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

代码语言:javascript
复制
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把它当作一个简单的字符串对待?

那就不要用反斜杠逃跑。将任何其他字符设置为转义字符

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

代码语言:javascript
复制
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>

因此,正如您所看到的,只有正斜杠用于转义,而不是反斜杠。

对于这一点,您也可以使用任何其他字符来转义:

代码语言:javascript
复制
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>

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

票数 2
EN

Stack Overflow用户

发布于 2015-04-29 04:16:45

代码语言:javascript
复制
SQL> CREATE TABLE Dictionnaire(MOT VARCHAR2(20),Definition varchar2(40));

Table created.

Elapsed: 00:00:00.71

如果你也想要引号,如果你只想要反斜杠,那就看其他插入,

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-04-30 14:07:57

是否有一种方法来对待撇号与围绕这些值的单一引号不同?

代码语言:javascript
复制
INSERT INTO DICTIONNAIRE (Mot) VALUES ('s'ensuivre');

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

代码语言:javascript
复制
INSERT INTO DICTIONNAIRE (Mot) VALUES ('s''ensuivre');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29934185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档