`
WenBin_Zhou
  • 浏览: 16828 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle 内的insert插入转义字符 单引号'和&符的问题

阅读更多


文章出处:DIY部落(http://www.diybl.com/course/7_databases/oracle/oraclejs/20091020/179622.html)

 


在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Insert语句,怎么会有自定义变量呢?后来搜索了一下关键字AMP发现,原来是因为在插入数据中有一个字段的内容如下:

http://mobile.three.com.hk/3DX?uid=0676 & sid=rt_060908

Oracle把这里的URL的参数连接符&当成是一个自定义变量了,所以要求我给变量AMP赋值。怎么办呢?方法有三:

·方法一:在要插入的SQL语句前加上Set define off;与原SQL语句一起批量执行

   我们在SQL*PLUS下执行 SQL> show all命令时,可以发现一个参数:define "&" (hex 26),如下图所示

......
   concat "." (hex 2e)
copycommit 0
copytypecheck ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT OFF
echo OFF
......

这个是Oracle里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭:

SQL> Set define OFF;

然后再次执行导入脚本,OK!问题搞定。

注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
          如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。

·方法二:在SQL语句中将'&'替换成chr(38),因为chr(38)是‘&’的ASCII码

   SQL> Select 'Tom' || chr(38) || 'Jerry' from dual;

·方法三:分拆原来的字符串

   SQL> Select 'Tom' || '&' || 'Jerry' from dual;


我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差!


那么如果字段的内容中包含了单引号要怎么插入呢?例如:It's fine。方法同样有三

·方法一:使用转义字符

   SQL > Select 'test' || '''' from dual;

   注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议。那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符
           第三个'才是我们真正的内容

·方法二:同样是使用转义字符,只不过方式不同而已

   SQL > Select 'test ''' from dual;

   注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容

·方法三:在SQL中将'替换成chr(39),因为chr(39)是'的ASCII码

   SQL > Select 'It' || chr(39) || 'fine' from dual;

二、oracle中select查询 where条件中一般的转义字符

用法是:
select distinct t.TABLE_NAME from user_tab_columns t
where t.TABLE_NAME like 'A/_%' ESCAPE '/'
ESCAPE 后的字符可以随意定义。此语句功能是查出所有以A_开头的表名。由于_在sql的like中代表一个字符,所以需要使用转义字符。
但当有多个like字符时,在每个like后都要指定转移字符,例如:
select distinct t.TABLE_NAME from user_tab_columns t
where t.TABLE_NAME like 'A/_%' ESCAPE '/'
or t.TABLE_NAME like 'B/_%' ESCAPE '/'
or t.TABLE_NAME like 'C/_%' ESCAPE '/'
or t.TABLE_NAME like 'D/_%' ESCAPE '/'
此语句可以查出以“A_”“B_”“C_”“D_”开头的表名。
如果写成
select distinct t.TABLE_NAME from user_tab_columns t
where t.TABLE_NAME like 'A/_%'

or t.TABLE_NAME like 'B/_%'
or t.TABLE_NAME like 'C/_%'
or t.TABLE_NAME like 'D/_%' ESCAPE '/'
那么能查出“A/”且其后至少有一个字符“B/”且其后至少有一个字符“C/”且其后至少有一个字符“D_”的表名

转自:http://hi.baidu.com/lxl_buat/blog/item/39963ff7fa5bb028720eecad.html

其中Set define OFF; 其中似乎在pl/sql中不能执行成功!

分享到:
评论

相关推荐

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

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

    Oracle中插入特殊字符:&和'的解决方法汇总

    还有一种方法是连续写两个单引号,如`'test '''`,第二个和第三个单引号构成一个转义字符,第四个单引号是实际内容。 3. **方法三:使用`CHR(39)`替换`'`** 类似于处理`&`字符,也可以通过`CHR(39)`来代表单引号...

    浅谈oracle中单引号转义

    在Oracle数据库中,单引号(')...总结来说,理解和正确使用单引号转义是编写Oracle SQL查询时的关键技能,尤其是在处理动态SQL和字符串操作时。了解双引号在特定情况下的特殊含义也有助于编写更灵活和准确的SQL语句。

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

    3. **字符串转义**:在某些情况下,为了确保SQL语句的正确性,需要对字符串中的特殊字符进行转义处理,如将单引号转为两个连续的单引号。 4. **数据库驱动**:用于连接应用程序和数据库之间的软件层,它负责转换...

    富士通内部培训ORACLE资料

    若需查询包含这些字符的数据,需进行转义,例如在字符串中使用两个单引号''来表示一个单引号。 2. **插入单引号**:在插入数据时,如果字段值包含单引号,应使用两个单引号 '' 来表示一个单引号。例如,`INSERT ...

    oracle常用问题解答

    **问题**: 如何将含有单引号(')的字符串插入到Oracle数据库表中? **解答**: 在Oracle中,如果要在字符串中包含单引号,可以通过在两个单引号之间插入另一个单引号来实现。 - **示例**: 假设需要将字符串"John's...

    mysql和oracle区别.docx

    在 Oracle 中,如果字符串内部含有单引号,需要使用两个单引号来转义。 4. **分页查询**: MySQL 使用 LIMIT 子句轻松实现分页,如 `LIMIT 开始位置, 记录个数`。Oracle 的分页查询相对复杂,通常需要使用子查询...

    精彩编程与编程技巧-如何在資料庫中存入單引號?...

    在本篇文章中,我们将探讨如何在Access或Oracle等数据库中正确地存储包含单引号的字符串。这个问题在实际开发中非常常见,特别是当涉及到客户姓名、地址等可能包含单引号的信息时。 #### 解决方案 为了解决这一...

    oracle数据库常用操作指令

    针对可能存在的单引号问题,需要将单引号替换成两个单引号进行转义。对于CLOB类型的大文本数据,可以使用DBMS_LOB程序包进行处理。 DELETE语句用于删除表中符合条件的记录。需要注意的是,DELETE操作并不会立即释放...

    Oracle SQL

    在使用INSERT语句时,字符串类型的字段值必须使用单引号括起来,并且如果值中包含单引号,则需要将单引号进行转义,即使用两个单引号来代替。日期字段的值可以使用系统时间SYSDATE或者TO_DATE函数进行转换,以满足...

    维护项目oracle常用语句

    如果要查询包含这些特殊字符的数据,需要使用转义字符`\`。例如,查询以"A\%"开头的记录,应写为`select * from table where name like 'A\%' escape '\';`。 2. **插入单引号**: 插入单引号到数据库时,可以使用...

    oracle代码大全.pdf

    插入字符串时需使用单引号,特殊字符如单引号需转义,日期字段可以使用SYSDATE或TO_DATE函数转换。注意,插入字符串长度限制为4000个单字节,超过需使用CLOB类型和DBMS_LOB包。 2. DELETE DELETE语句用于删除表中的...

    oracle 之FAQ

    - **问题**: 如何在Oracle中插入包含特殊字符如单引号的数据? - **解答**: 在Oracle中插入包含单引号的数据可以通过以下两种方式实现: - 使用`CHR()`函数将单引号表示为ASCII码: ```sql INSERT INTO t VALUES ...

    Oracle的SQL语法大全

    字符串需用单引号包围,特殊字符如单引号需转义。日期字段可用`SYSDATE`表示当前时间,或通过`TO_DATE()`函数将字符串转换为日期格式。 2. **DELETE**: 删除表中的记录。基本语法是:`DELETE FROM 表名 WHERE 条件...

    ORACLESQL拼接语句.pdf

    字符串值需用单引号包围,特殊字符如单引号需转义(用两个单引号表示)。日期字段可以用`SYSDATE`获取当前时间,或通过`TO_DATE()`函数转换字符串为日期。字符串长度限制为4000个单字节,若需插入更长字符串,应使用...

    ORACLE常用的SQL命令

    - 字符串类型字段需用单引号包围,特殊字符如'需要转义为''。日期字段可用SYSDATE表示当前时间,或使用TO_DATE函数转换字符串为日期。 - 对于长文本,超过4000字节的限制,可以使用CLOB类型,并借助DBMS_LOB包进行...

    ORACLE 常用的SQL语法和数据对象

    字符串需用单引号包围,特殊字符如单引号需转义为两个单引号。日期字段可以使用`SYSDATE`获取当前时间,或者使用`TO_DATE()`函数将字符串转换为日期。 2. DELETE语句:删除表中的记录。`DELETE FROM 表名 WHERE ...

    oracle_sql语句[借鉴].pdf

    字符串字段需用单引号包围,特殊字符如单引号需要转义(使用两个单引号)。日期字段可使用`SYSDATE`获取当前系统时间,或通过`TO_DATE`函数将字符串转换为日期。注意,插入的字符串长度不能超过4000个字符,超出可用...

    Oracle SQL培训笔记

    - **说明**: 在 SQL 中插入单引号 `'` 需要使用两个单引号 `''` 或者使用 `||chr(39)||` 方式。`chr(39)` 返回 ASCII 值为 39 的字符,即单引号。 - **示例**: 插入一条记录到 `test` 表,其中 `name` 字段的值为 ...

Global site tag (gtag.js) - Google Analytics