`

oralce里面的单引号

 
阅读更多

在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 'exit'||'''' from dual;

'EXIT'||''
----------
exit'

SQL> select 'exit''''' from dual;

'EXIT'''''
------------
exit''
对于第一个,前两个单引号配对,后面四个单引号按照上面的第一条原则分配,既:select 'exit'||'''' from dual;
对于第二个,由于第二个单引号后面存在单引号,所以就不与第一个配对,而是充当了转义的角色。既:select 'exit''''' from dual;

有了上面的两条原则,我们就可以从容的面对复杂的动态SQL了。

分享到:
评论

相关推荐

    浅谈oracle中单引号转义

    ORACLE 单引号转义: 在ORACLE中,单引号有两个作用:   1:字符串是由单引号引用   2:转义。  单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解  1.从第二个单引号开始被视为...

    SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf

    SQL 中存储过程中 SQL 语句的单引号和双引号问题 在 SQL 中,单引号和双引号的问题是一个常见的混淆点,特别是在存储过程中编写 SQL 语句时。下面将对此问题进行详细的解释和总结。 一、单引号和双引号的基本概念 ...

    oracle插入字符串数据时字符串中有'单引号问题

    在Oracle数据库中,当尝试插入包含单引号(')的字符串数据时,通常会出现语法错误,因为单引号被用来标记字符串的开始和结束。Oracle SQL解析器会将单个单引号视为字符串的边界,如果字符串内部出现单引号,它会认为...

    自动给数据库数据加单引号

    因为oracle每次in()数据不能超过1000行,但是每个数据都要接单引号,所以写了这个程序,使用方法:复制多行数据,然后双击程序,会自动把数据加上单引号更新粘贴板,粘贴到in()中去就可以了。

    POWERDESIGNER生成oracle表名带有引号

    POWERDESIGNER生成Oracle表名带有引号的解决方案 POWERDESIGNER 是一款功能强大的数据建模工具,它可以帮助用户设计、生成和管理数据库结构。然而,在使用 POWERDESIGNER 生成 Oracle 表名时,可能会遇到表名带有...

    Oracle字符串怎样连接单引号

    在Oracle数据库中,处理字符串和单引号的连接是一个常见的任务,特别是在编写SQL查询和存储过程时。以下是一些关于如何在Oracle中正确连接和转义单引号的知识点: 1. **字符串识别标识**:在Oracle SQL中,单引号...

    精彩编程与编程技巧-如何在表中保存单引号?...

    本篇文章将重点讨论如何在不同的数据库环境中(例如Access和Oracle)正确地存储包含单引号的数据。通过一个具体的VB6示例代码来展示这一过程。 #### 关键概念解释 1. **SQL Injection(SQL注入)**:是一种常见的...

    centos6.4 安装 oracle12c 单实例 asm

    本篇教程将详细介绍如何在CentOS 6.4操作系统上安装Oracle 12c数据库的单实例版本,并使用自动存储管理(ASM)。 首先,安装Oracle数据库之前,需要对系统环境进行全面的检查,确保操作系统满足Oracle 12c的安装...

    sql语句中单引号,双引号的处理方法

    此外,不同的数据库管理系统(DBMS)可能有不同的语法要求,例如,MySQL使用`"`而不是`'`来定义字符串,而Oracle支持双引号和单引号,但推荐使用双引号。 总之,理解和正确使用SQL中的单引号和双引号是编写安全、...

    Oracle EBS 单点登录 方案

    Oracle EBS(E-Business Suite)单点登录(Single Sign-On, SSO)方案是企业级集成的关键组成部分,它允许用户在多个应用间切换而无需重复登录,提高了工作效率并增强了安全性。本文档主要针对Oracle E-Business ...

    Oracle 19c 单实例 RU 从19.3.0 升级到19.6.0 操作手册.pdf

    Oracle 19c 单实例 RU 从19.3.0 升级到19.6.0 操作手册 Dave From CNDBA 社区

    单实例安装oracle10g oracle11g

    在讲解如何在Red Hat Enterprise Linux(RHEL)版本5和6上分别安装Oracle Database 10g和11g的单实例之前,需要了解Oracle数据库安装涉及到的各个步骤和准备工作。以下是对安装过程中所需知识点的详细说明。 ### ...

    oracle插入字符串数据时字符串中有’单引号问题

    处理方法:判断一下val1,val2中是否含有单引号,若含单引号,则将单引号’替换成两个单引号”。 将字段与字段值组织到一个HashTable中,再抽象出一个组织sql语句的函数getSqlByHashTable(): HashTable ht =new ...

    oracle单点登录demo示例

    Oracle单点登录(Single Sign-On, SSO)是一种身份验证机制,它允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。Oracle的SSO解决方案提供了企业级的安全性和便利性,大大提高了用户体验并降低...

    Oracle中转义字符的详细介绍

    在Oracle数据库中,转义字符是一个非常重要的概念,特别是在处理包含单引号的字符串时。在Oracle SQL中,单引号 `'` 主要有两个用途:界定字符串和进行转义。 1. **字符串界定**:在Oracle中,我们使用单引号来界定...

    Oracle 单实例DG搭建详解.pdf

    Oracle 单实例 DG 搭建详解 Oracle 单实例 DG 搭建详解是一份详细的实施方案,旨在帮助实施人员根据当前业务特点,规划、建设符合高可用、高可靠的数据库集群系统。该方案涵盖了 Oracle Data Guard 环境拓展、...

    ORACLE 12C RAC 主库配置单实例ADG

    ORACLE 12C RAC 主库配置单实例 ADG Oracle 12C RAC 主库配置单实例 ADG 是一种高可用性和灾难恢复解决方案,旨在提供高可用性和数据保护。下面将详细介绍 ORACLE 12C RAC 主库配置单实例 ADG 的知识点。 一、...

    oracle单表操作

    oracle2-单表操作

    java导出oracle数据(单表)

    Java 导出 Oracle 数据(单表) 在本资源中,我们将讨论如何使用 Java 语言导出 Oracle 数据库中的单表数据。该资源提供了一个完整的示例代码,展示了如何使用 Java 语言连接 Oracle 数据库,执行导出操作,并处理...

Global site tag (gtag.js) - Google Analytics