单引号双重角色——字符串引用与转义
在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义,开始学习时动态构成SQL时经常不解。单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解。
1、从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。
SQL> SELECT '''' FROM DUAL;
''
--
'
为了证实结果是被第二个单引号转义的第三个单引号(既:SELECT '''' FROM DUAL;),我们做如下两个测试:
SQL> SELECT ''' FROM DUAL;
ERROR:
ORA-01756: 括号内的字符串没有正确结束
相信大家对这样的错误不陌生吧
SQL> SELECT 'SDLF FROM DUAL;
ERROR:
ORA-01756: 括号内的字符串没有正确结束
也就是说,当第二个单引号充当转义角色,第三个单引号被转义,(既:select '' ' from dual;)自然就缺少与第一个单引号匹配的单引号了,出现了孤立的单引号
下面的两个实验就更加支持了上面的结论。
SQL> SELECT ' '' ' FROM DUAL;
''''
------
'
SQL> SELECT '' '' FROM DUAL;
SELECT '' '' FROM DUAL
*
ERROR 位于第 1 行:
ORA-00923: 未找到预期 FROM 关键字
对于第一个:SELECT ' '' ' FROM DUAL;
对于第二个:不存在转义。
上面的这两个实验其实也是单引号转义与非转义的一个性质:转义是密集的,也就是说,如果单引号出现在转义的位置上,而该单引号后面紧跟(紧跟的定义为:两个单引号之间是零距离的)的不是单引号,这个时候单引号就不在充当转义的角色,而是与它前面的配对。
2、连接符‘||’导致了新一轮的转义:连接符号‘||’左右的单引号没有任何的关系,除非‘||’是作为字符串的一部分(这在动态SQL中很常见)。
SQL> SELECT 'ORACLE'||'''' FROM DUAL;
'ORACLE'||''
----------
ORACLE'
个人理解,'ORACLE'||'''' 后面的“''''”应该认为是一个字符串(即前后单引号,中间是“''”串,而中间又是密集单引号,因此第一个为转义功能)
SQL> SELECT 'ORACLE''''' FROM DUAL;
'ORACLE'''''
------------
ORACLE''
对于第一个,前两个单引号配对,后面四个单引号按照上面的第一条原则分配,既:SELECT 'ORACLE'||'''' FROM DUAL;
对于第二个,由于第二个单引号后面存在单引号,所以就不与第一个配对,而是充当了转义的角色。既:SELECT 'ORACLE''''' FROM DUAL;
有了上面的两条原则,我们就可以从容的面对复杂的动态SQL了。
转自:http://www.cnblogs.com/mingal/archive/2008/06/04/967782.html
两个单引号'' 在拼接SQL的时候算一个单引号'
相关推荐
ORACLE 单引号转义: 在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为...
SQL 中存储过程中 SQL 语句的单引号和双引号问题 在 SQL 中,单引号和双引号的问题是一个常见的混淆点,特别是在存储过程中编写 SQL 语句时。下面将对此问题进行详细的解释和总结。 一、单引号和双引号的基本概念 ...
在Oracle数据库中,当尝试插入包含单引号(')的字符串数据时,通常会出现语法错误,因为单引号被用来标记字符串的开始和结束。Oracle SQL解析器会将单个单引号视为字符串的边界,如果字符串内部出现单引号,它会认为...
因为oracle每次in()数据不能超过1000行,但是每个数据都要接单引号,所以写了这个程序,使用方法:复制多行数据,然后双击程序,会自动把数据加上单引号更新粘贴板,粘贴到in()中去就可以了。
本篇文章将重点讨论如何在不同的数据库环境中(例如Access和Oracle)正确地存储包含单引号的数据。通过一个具体的VB6示例代码来展示这一过程。 #### 关键概念解释 1. **SQL Injection(SQL注入)**:是一种常见的...
在Oracle数据库中,处理字符串和单引号的连接是一个常见的任务,特别是在编写SQL查询和存储过程时。以下是一些关于如何在Oracle中正确连接和转义单引号的知识点: 1. **字符串识别标识**:在Oracle SQL中,单引号...
此外,不同的数据库管理系统(DBMS)可能有不同的语法要求,例如,MySQL使用`"`而不是`'`来定义字符串,而Oracle支持双引号和单引号,但推荐使用双引号。 总之,理解和正确使用SQL中的单引号和双引号是编写安全、...
在Oracle数据库中,转义字符是一个非常重要的概念,特别是在处理包含单引号的字符串时。在Oracle SQL中,单引号 `'` 主要有两个用途:界定字符串和进行转义。 1. **字符串界定**:在Oracle中,我们使用单引号来界定...
处理方法:判断一下val1,val2中是否含有单引号,若含单引号,则将单引号’替换成两个单引号”。 将字段与字段值组织到一个HashTable中,再抽象出一个组织sql语句的函数getSqlByHashTable(): HashTable ht =new ...
在大多数SQL方言中,包括MySQL、SQL Server、Oracle等,如果你的字符串内容里有一个单引号,你需要在它前面再添加一个单引号来进行转义。例如,如果你要搜索包含“标准间”的ROOMTYPE,正确的写法应该是: ```sql @...
在MySQL数据库中,单引号的使用在某些情况下会对查询性能产生显著影响。这个问题主要涉及到数据类型和索引的使用。标题提到的“一个单引号引发的MYSQL性能问题分析”实际上是指在查询字符串类型主键时,是否使用单...
对于字符串,需用单引号包围,如果字符串中包含单引号,需要使用两个单引号表示。日期字段可以用`SYSDATE`获取当前系统时间,或通过`TO_DATE()`函数转换字符串。`TO_DATE()`支持多种日期格式。注意,单个INSERT语句...
MySQL 里可以用双引号包起字符串,Oracle 里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。 4. 翻页的 SQL 语句的处理 MySQL 处理翻页的 SQL 语句...
2. **插入单引号**:在插入数据时,如果字段值包含单引号,应使用两个单引号 '' 来表示一个单引号。例如,`INSERT INTO table (column) VALUES ('It''s a test')`。 3. **事务一致性**:在Oracle中,可以通过`SET ...
**解答**: 在Oracle中,如果要在字符串中包含单引号,可以通过在两个单引号之间插入另一个单引号来实现。 - **示例**: 假设需要将字符串"John's"插入到某个字段中: ```sql INSERT INTO table_name (column_name)...
如果字段值中包含单引号,需要进行字符串转换,使用两个单引号’’代替。日期字段的字段值可以使用当前数据库的系统时间 SYSDATE,或者使用 TO_DATE 函数将字符串转换为日期类型。 2. DELETE 语句 DELETE 语句用于...
插入单引号时,可以使用ASCII码`chr(39)`或者两个单引号`''`来表示一个单引号。 2. **事务一致性**:Oracle提供了不同的事务隔离级别,如`READ COMMITTED`(语句级一致性)和`SERIALIZABLE`(事务级一致性)。`READ...
MySQL允许字符串使用双引号,而Oracle则要求使用单引号。在处理字符串时,需要将所有的单引号替换为两个单引号,例如`' -> ''`。 3. **翻页SQL语句的处理**: MySQL的分页查询使用`LIMIT`,而在Oracle中,需要...