• Oracle中nvl()、instr()、及执行多条sql事务操作


    Oracle的Nvl函数

    nvl( ) 函数

    从两个表达式返回一个非null 值。

    语法

    NVL(eExpression1, eExpression2)

    参数

    eExpression1, eExpression2

    如 果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。

    返回值类型

    字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值

    说明

    在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。

    select nvl(a.name,'空得') as name from student a joinschool b on a.ID=b.ID

    注意:两个参数得类型要匹配

    ------------------------------------------------

    在Oracle中提供了instr(strSource,strTarget)函数,比使用’%关键字%’的模式效率高很多。

    instr函数也有三种情况:
    instr(字段,’关键字’)>0相当于 字段like ‘%关键字%’
    instr(字段,’关键字’)=1相当于 字段like ‘关键字%’
    instr(字段,’关键字’)=0相当于 字段not like ‘%关键字%’
    例子:
    SELECT * FROM [user] WHEREinstr(uname ,’三’)>0
    用法参照上面的Like 即可

    特殊用法:
    select id, namefrom user where instr(‘101914, 104703’, id) > 0;
    它等价于
    select id, namefrom user where id = 101914 or id = 104703;

    在数据量比较少的时候,可以直接使用上面这两种方法,但是当数据量特别大的时候,我们就应该考虑效率的问题了。虽说在效率上Instr比like关键字方法效率要高出不少,但这也仅仅是在一定程度上而言,远不能满足我们的需要。

    为什么关键字查询效率这么低呢?这是由于在利用这些关键字查询的时候,数据库系统不是通过索引来查询,而是采用顺序扫描的方式来查询。显然,真是这种技术特性,造成了Like关键字查询效率的低下。特别是在复杂查询或者大表查询中,用户可以明显感觉到速度比较慢。

    ---------------------------------------------------------

     问题,执行一段代码反回一个字符串,这个串中就是要执行我多条SQL语句。怎样让它在ORACLE中通过呢。想来想去想到了动态SQL,EXECUTE IMMEDIATE 这是一个解析和执行标准SQL语句的语法。只要在这条字符串中格式化一下我们要执行的语句就可以了,比如这条要执行的多条SQL的字符串为:

      delete tableA where Aid=1;update tableB where Bid=2;insert into tableC values(id,3,4);

    像这样的SQL语句想一起执行是不可以的,只要加点格式化就OK了,

    要这样:BEGIN EXECUTE IMMEDIATE 'delete tableA where Aid=1';EXECUTE IMMEDIATE 'update tableB where Bid=2';EXECUTE IMMEDIATE 'insert into tableC values(id,3,4)';END;

    注意,一定要写好格式,比如END后的分号。这样就可以在ORACLE中执行这个字符串了。

    摘自:https://blog.csdn.net/cpp1781089410/article/details/70226396/

    自古英雄出炼狱,从来富贵入凡尘。
  • 相关阅读:
    Oracle建立表空间和用户
    Session详解
    Spring中AOP方式实现多数据源切换
    Filter(过滤器)学习
    不用加号运算
    数字转化为十六进制
    1px像素问题(移动端经典问题)
    对postcss-plugin-px2rem的研究
    npm cache clean --force
    对async/await的研究
  • 原文地址:https://www.cnblogs.com/yunliu0603/p/9532081.html
Copyright © 2020-2023  润新知