zoukankan      html  css  js  c++  java
  • oracle_单引号问题和execute immediate 赋值问题

    今天初步学习了oracle后,发现了一些关键的小技巧

    从第一引号向后,如果遇到第二个引号,则看这个引号后面时候有紧挨着的引号,如果有则第二个引号被转义,即该保留该引号后面紧跟的那个引号

    declare 
    v_char varchar2(2) :='zz';
    begin
    execute immediate '   delete from aa where b='''||v_char||'''     ';
    end;

    (1) 有关单引号的问题

    在使用||进行字符串或者变量的拼接时,常常会用到单引号。

          单引号有两个作用, 一个是用作单引号,一个是转义。单引号普通的使用不必多说,重点在于转义。

    当你如果想对一个变量进行一些sql语句的操作时,往往会要使用 '+变量名+’的形式

    例如:select count(1)  from sys.user_tables where table_name='tableName'    //这里的tableName是一个变量,假设它的值为emp

            此时如果调用的话,那么就会出现一些错误,因为此时的table_name='tableName',并不是我们想要的值,我们要的值为table_name='emp'

    所以问题来了,如何实现

    此时就用到单引号的转义字符的功能

    当单引号出现多个时,第二个单引号便是转义字符。

    例如:   select count(1)  from sys.user_tables where table_name='||'    '''||tableName||'''     '

    ''''中,开头和结尾的'作为字符串的引用,中间两个的第一个为转义字符,中间两个的第二个为单纯的',所以,通过这种方式,我们就解决了刚刚的功能。

     execute immediate '  select count(1)  from sys.user_tables where table_name='||'     '''||tableName||'''     ';  来执行

    (2)execute immediate 赋值问题

     select count(1) into v_aa from emp where empno=1; //v_aa 是一个变量

    通过这种方法对v_aa这个变量赋值时,如果采用execute immediate 执行这条语句进行赋值,此时是错误的。

          应该是

    execute immediate ' select count(1)  from emp where empno=1' into v_aa ;

    没错,如果使用execute immediate,赋值应该放在最后!

    利用字符拼接方法,将游标变量和DDL语言拼接成完整的DDL语言并存储到变量中。

    在块中需要执行DDL语言时,就必须用以下这种方式,不能直接在块中写DDL语言

    execute immediate 'DDL语言' ;

    如果不需要引入变量,也可以直接将DDL语言写在 execute immediate 后面的单引号中。

    需要注意,拼接的DDL语言中不能以分号结尾,而将拼接完成的字符串赋值给变量时 ,外层是需要分号结尾的。

    同时,变量两侧的单引号中的内容需要考虑到空格的存在,否则,拼接出的字符串,表名和前后的关键词将会连在一起,导致

    DDL语言执行失败。

    oracle excute immediate 单引号转义

    excute immedaite 后接单引号,但是遇到 add xxx default ' ' ,命令中还有单引号的情况,需要转义。这时候不是用传统的

    反斜杠来转义,而是用 单引号转义

     execute immediate 'ALTER TABLE   E_UC_DEPLOYMENTUMS add  sumsurl VARCHAR2(64) default ''ums.huawei.com'' not null';

  • 相关阅读:
    负载均衡的部署方式
    nginx 负载均衡相关知识
    nginx 的模块及处理流程
    win7 下配置resin的一些tip
    Eclipse插件安装的三种方法
    win 7 下Maven环境的搭建
    Effective C++ 第二版 17)operator=检查自己 18)接口完整 19)成员和友元函数
    网络子系统54_ip协议分片重组_定位ipq
    HDU 1796How many integers can you find(简单容斥定理)
    如何关闭dell inspiron n4010的内置麦克
  • 原文地址:https://www.cnblogs.com/mxh168/p/14006712.html
Copyright © 2011-2022 走看看