`
halfish
  • 浏览: 43848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle & 和 ' 特殊字符处理 ( like 'GAC/&_%' escape '&'; 这里面的 / 居然将& 转义了 为什么?)

阅读更多
http://blog.csdn.net/gjswxhb/article/details/6083242
写道
今天在导入一批数据到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 '&'; 这里面的 / 居然将& 转义了 为什么?



这些可能涉及到闭包之类的知识(隐隐约约记得编译原理老师讲过) 当初没学会, 现在要加倍努力!

 

分享到:
评论

相关推荐

    gac.rar_ GAC matlab_GAC_matlab_gac_matlab 图像分割_制图用的gac

    GAC是“全局对比度(Global Contrast)”的缩写,这是一种在图像处理和计算机视觉领域广泛使用的图像分割算法。MATLAB是一个强大的数值计算和数据可视化平台,常被用于开发这样的算法。 GAC算法基于局部和全局对比...

    1GAC_fenge_gac_图像分割_

    图像分割是计算机视觉领域中的一个核心任务,它涉及到将一幅图像划分为多个具有不同特征的区域或对象。在这个场景中,我们关注的是基于GAC(Geodesic Active Contours)算法的图像分割方法,该方法在MATLAB环境中...

    GAC.rar_GAC matlab_GAC模型_gac_matlab GAC_水平集

    本程序采用迎风方案实现推广GAC模型的水平集方法.

    GAC.zip_GAC matlab_GAC模型_GAC水平集_gac_迎风

    《GAC模型在Matlab中的实现与迎风方案解析》 GAC,全称为Geodesic Active Contours,中文名为地统计活动轮廓模型,是一种基于水平集方法的图像...深入学习和掌握这一技术,无疑将提升我们在图像处理领域的专业能力。

    GAC_A06_Simulation_V1.8.16_Bootloader_GACA06_

    同时,手册也会涵盖错误处理机制和故障排查步骤,以帮助开发者顺利完成固件升级过程。 综上所述,GAC_A06_Simulation_V1.8.16 Bootloader是针对S12(X)系列MCU的一款强大工具,结合CAN总线通信和独立NVM驱动,为...

    gac.rar_gac_智能控制_简单遗传算法_遗传算法

    "gac.rar_gac_智能控制_简单遗传算法_遗传算法"这个压缩包内容可能包含了关于C语言实现的简单遗传算法的源代码和相关资料。 1. **遗传算法的基本概念**: - **种群(Population)**:遗传算法的初始解集,由多个...

    GAC1.rar_GAC1_变分_图像分割gac_断裂_水平集

    用GAC变分水平集方法进行图像分割,克服传统方法中的断裂问题

    get.rar_gac_level set_level set function

    综上所述,这个压缩包提供了一套完整的GAC算法实现,包括了从读取图像、处理噪声、初始化和演化水平集函数,到最终完成图像分割的全过程。用户可以通过运行"GAC_demo.m"来体验GAC算法在分割带有噪声图像中的效果。

    GAC_wind.rar_GAC模型_gac_迎风

    本程序采用迎风方案实现推广GAC模型的水平集方法:

    GACspy.rar_GAC快速看图_gac_图像分割gac_水平集_水平集分割

    利用GAC水平集迎风方案实现图像分割,分割效果较好,收敛速度快

    GAC.rar_active contour_gac_图像分割_测地线_测地线模型

    测地线活动轮廓模型(Geodesic Active Contours, GAC)是计算机视觉领域中用于图像分割的一种高级方法,尤其适用于复杂形状的精确边界识别。该模型由Cris Luengo和Jorge C. S. Costa在1998年提出,它结合了测地线的...

    GAC_MSIL.rar

    在日常管理和维护中,了解如何正确处理和使用GAC中的组件对于开发者和IT专业人员来说至关重要。这涉及到理解.NET Framework的运行机制、程序集的生命周期管理以及如何调试与GAC相关的错误。同时,对于SQL Server ...

    Geodesic_Active_Contour_gac_

    3. `EVOLUTION_GAC.m`:这是GAC模型的主要实现文件,负责计算和更新轮廓曲线,使其逐渐逼近最佳分割位置。 4. `GAC_demo.m`:演示脚本,用于展示如何使用GAC模型进行图像分割。 5. `Dx_forward.m`, `Dx_backward.m`,...

    WEF_GAC15_Technological_Tipping_Points_report_2015.pdf

    6. **口袋里的超级计算机**:智能手机将拥有与个人电脑相媲美的处理能力。 7. **存储为所有人**:云存储的普及将使得数据存储变得无处不在且易于访问。 8. **物联网(IoT)**:物理世界中的物品通过网络连接,形成...

    GAC_pde.rar_GAC模型_over segmentation_偏微分方程 matlab_分割 改进_改进GAC

    基于偏微分方程的对GAC模型的改进算法的程序实现,可以对图形进行分割,此程序中如改变迭代的次数,分割效果回会逐渐的变好,但速度会变慢,当迭代次数超过4000次以上,效果就不是很明显了

    gac_myself.rar_GAC水平集_LBF_变分水平集_活动轮廓_测地

    基于变分水平集的测地线活动轮廓,是Ohah的最新理论

    matlab.rar_GAC模型_Level set method_scheme segmentation

    在本文中,我们将深入探讨基于MATLAB的GAC(Geodesic Active Contours)模型,以及如何利用Level Set方法和Scheme Segmentation技术进行图像分割。MATLAB是一个强大的数学计算和编程环境,尤其适用于处理图像处理和...

    Oracle.DataAccess 64位/32位 各版本集合

    安装Oracle.DataAccess时,通常有两种方式:一是将Oracle.DataAccess.dll作为应用程序的依赖项打包,二是通过GAC(全局程序集缓存)全局安装,使系统中的所有应用程序都能使用。安装完成后,需要在应用程序配置文件...

    radar2d_sarma_mz_Ns.rar_SARMA_gac_爆炸_爆炸源

    中心爆炸源sarma吸收...1. GAC.m是加了过渡带的,对左右下三边处理的; 2. GAC2.m是没有加过渡带的,对左右下三边处理的; 3. GAC3.m是加了过渡带的,对四边都处理的; 4. GAC3.m是没有加过渡带的,对四边都处理的;

    Matlab实现GAC模型

    在图像处理领域,GAC(Geodesic Active Contours)模型是一种广泛应用的图像分割方法,它结合了水平集方法和几何偏微分方程。MATLAB作为一种强大的数值计算和图形处理环境,是实现GAC模型的理想工具。下面将详细介绍...

Global site tag (gtag.js) - Google Analytics