oracle & 和 ' 特殊字符处理
今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示(plsql 也一样)要给一个自定义变量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(plsql 也一样)中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。
SET DEFINE OFF 的用法;
在SQL*Plus中默认的"&"表示替代变量,也就是说,只要在命令中出现该符号,SQL*Plus就会要你输入替代值。这就意味着你无法将一个含有该符号的字符串输入数据库或赋给变量,如字符串“SQL&Plus”系统会理解为以“SQL”打头的字符串,它会提示你输入替代变量Plus的值,如果你输入ABC,则最终字符串转化为“SQLABC”。
set define off 则关闭该功能,“&”将作为普通字符,如上例,最终字符就为“SQL&Plus”
set define off关闭替代变量功能
set define on 开启替代变量功能
set define * 将默认替代变量标志符该为“*”(也可以设为其它字符)
·方法二:在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;
以上 转自:http://lichangwei.javaeye.com/?page=3&show_full=true (本文稍作了修改)
以上的 ' 转义字符,只能转变 ' 的意思,或者说' 只能转变 ' 为字符,不能对其他字符进行转义 如通配符的转义
通配符的转义
通配符的转义没有专门的字符,或者说,统配符的转义字符用 关键字: ESCAPE 指定,
如下面的t 为转义字符,
SQL> select * from user_tables where table_name like 'GACt_%' escape 't';
TABLE_NAME TABLESPACE_NAME CLUSTER_NAME
------------------------------ ------------------------------ ------------------------------
GAC_NITIN SYSTEM
而 ' 也可以指定为 通配符的转义字符 (必须先通过 ' 将 ' 转义)
SQL> select * from user_tables where table_name like 'GAC''_%' escape '''';
TABLE_NAME TABLESPACE_NAME CLUSTER_NAME
------------------------------ ------------------------------ ------------------------------
GAC_NITIN SYSTEM
以上两种情况可以理解,下面两种情况却费解了,
下面这条语句执行时,没有弹出对话框,也就是说plsql 没有将 & 当作表示替代变量的符号, 是 \ 将其转义了吗? 为什么 \ 能将其转义? escape 指定的不是 \ 啊? 为什么他还能转义?
SQL> select * from user_tables where table_name like 'GAC\&_%' escape '&';
TABLE_NAME TABLESPACE_NAME CLUSTER_NAME
------------------------------ ------------------------------ --------------
GAC_NITIN SYSTEM
而下面的语句在执行是却弹出对话框要求为 _ 赋替代值, 这是否能说明 escape 没有将其转义, 还是因为到第一个& 时还不知道 escape
已经期指定为:转义字符?
SQL> select * from user_tables where table_name like 'GAC&_%' escape '&';
TABLE_NAME TABLESPACE_NAME CLUSTER_NAME
------------------------------ ------------------------------ ----------------
GAC_NITIN SYSTEM
很奇怪, like 'GAC\&_%' escape '&'; 这里面的 \ 居然将& 转义了 为什么?
这些可能涉及到闭包之类的知识(隐隐约约记得编译原理老师讲过) 当初没学会, 现在要加倍努力!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gjswxhb/archive/2010/12/17/6083242.aspx
分享到:
相关推荐
在Oracle数据库中,有时我们需要插入包含特殊字符的数据,如URL中的`&`和文本中的单引号`'`。这些字符在SQL语句中具有特定含义,因此直接插入可能会导致语法错误或解析问题。本文将详细介绍如何处理和插入这些特殊...
这篇BLOG文章主要讲述了当Oracle用户密码中含有特殊字符时,如何通过sqlplus连接以及使用exp和imp工具导出导入数据时遇到的问题及解决方案。 首先,需要明确的是,在Oracle数据库中,密码可以包含多种字符,包括大...
总之,Oracle中去除特殊字符主要依靠`REPLACE()`和`REGEXP_REPLACE()`函数,结合SQL的更新、选择、连接等操作,可以高效地处理和清理数据。在实际工作中,确保了解并熟练掌握这些技术,能够有效地提升数据处理的准确...
Oracle数据库提供了丰富的内置函数来处理数据,如日期处理函数、字符串处理函数、数学函数等。例如: - **日期处理函数**: - `SYSDATE`: 获取当前日期时间。 - **字符串处理函数**: - `UPPER`: 将字符串转换成...
通过上述示例可以看出,在Oracle中利用`REGEXP_SUBSTR`函数可以非常灵活地处理字符串,尤其是对于包含特殊符号(如逗号、冒号等)的字符串,能够轻松地提取所需的子字符串。这对于数据处理、报表生成等应用场景具有...
在创建或更新表、插入数据、更新数据或执行其他数据库操作时,我们有时需要确保输入的数据不包含任何非法或特殊字符,以避免引发错误或破坏数据的完整性。本话题将深入探讨如何在Oracle存储过程中检查和处理非法字符...
通过理解并巧妙运用`TRANSLATE`函数,我们可以解决Oracle数据库中字符串包含数字和特殊符号的排序问题,从而确保数据按预期的逻辑进行排序,满足项目需求。在实际应用中,可能需要根据具体的数据结构和排序规则调整`...
总结来说,Oracle SQL 提供了丰富的字符串处理功能,能够满足在数据库中截取和处理数据的各种需求。了解并熟练运用这些函数对于提升数据处理效率至关重要。在实际工作中,可以根据具体场景灵活组合使用这些函数,以...
2. **字符集父类向字符集子集转换**:会导致数据损失,因为新字符集无法表示原字符集中的一些特殊字符。 3. **英文字符数据的双字节字符集向单字节字符集转换**:例如ZHS16GBK (仅包含英文字符) 可以向US7ASCII正确...
在IT行业中,数据库管理和编程语言的交互是常见的工作场景,特别是在处理特殊数据类型时,如emoji表情。Oracle数据库系统在设计之初...在实际项目中,务必测试各种情况,确保所有设备和平台都能正确处理这些特殊字符。
- **字符集识别**:Oracle数据库支持多种字符集,如AL32UTF8、WE8ISO8859P1等,不同的字符集用于支持不同语言和特殊字符。在导入导出过程中,确保源和目标数据库的字符集兼容至关重要,否则可能导致乱码。 - **字符...
- **错误原因**:当尝试将一个字符型字段转换为数字时,如果该字段包含的不是有效的数值文字(如包含了字母、特殊符号等非数字字符),则会导致此错误。 - **解决方法**:需要检查涉及到的字符字段,确保它们只包含...
Oracle数据库系统支持多种字符集,以适应不同地区的语言和特殊字符需求。字符集定义了数据库如何存储和处理字符,对于多语言环境尤其重要。在Oracle中,常见的字符集包括ISO8859(如WE8ISO8859P1)、GB2312以及GBK等...
今天碰到一个比较奇怪的问题: 在客户端上使用sqlplus用普通用户可以... 本来以为客户端是32位的缘故,就在oracle服务器上用sqlplus登录,也还是一样 SQL> conn system@webdata Enter password: ERROR: ORA-12541: TNS
例如,在处理日志文件或用户输入时,可能需要确认是否包含特殊字符或非预期的中文信息。 7. 在文章的最后,作者鼓励读者提出意见和建议,并通过ITPUB留言或QQ与作者联系。这表明作者希望与社区进行互动,从而提高...
在使用Oracle XE时,有时我们可能需要修改数据库的字符集以支持不同的语言或特殊字符。此外,随着应用程序的发展,升级Oracle Application Express (APEX)到最新版本也是必要的,以获取更多的功能和安全性更新。以下...
在 Oracle 数据库中,XMLType 是一种特殊的数据类型,用于存储和处理 XML 数据。在本文中,我们将详细介绍 Java 中 XML 文件的处理及 Oracle 中 XMLType 的插入和读取。 一、Oracle 中创建表 在 Oracle 数据库中,...
以上只是Oracle特殊函数中的一部分,实际应用中还有许多其他函数,如 `DECODE`、`CASE` 语句等,可以根据具体需求灵活选择和组合使用。熟练掌握这些函数,能有效提高在Oracle SQL中的编程效率和数据处理能力。在实际...
在Oracle数据库中,字符集主要用于确保数据能够正确地存储、检索和处理。了解数据库的字符集对于确保数据的一致性和准确性至关重要。以下是查看Oracle数据库字符集的几种方法: 1. **查看数据库服务器字符集** - ...
6. **安全性**:特殊字符可能被利用进行SQL注入等攻击,检测和处理特殊字符有助于提高系统的安全性。 7. **错误处理和日志记录**:当检测到特殊字符时,如何记录并报告错误,以便开发者及时处理。 8. **用户界面...