zoukankan      html  css  js  c++  java
  • oracle = : := 和变量绑定 oracle通配符和运算符

    这篇是7788凑的:
    ":="是赋值语句 如: l_name :='sky';...
    "=" 是判断是否相等. 如: if 1=1 then...
    ":" 是变量绑定 如: if :P_NAME ='sky' then...

    变量绑定 是指在sql语句的条件中使用变量而不是常量。比如shared pool里有两条sql语句
    select * from tab1 where col1=1;
    select * from tab1 where col1=2;
    对oracle数据库来说,这是两条完全不同的SQL,对这两条语句都需要进行hard parse。因为oracle会根据sql语句的文本去计算每个字符在内存里的hash值,因此虽然上述两条SQL只有一个字符不一样,oracle根据hash算法在内存中得到的hash地址就不一样,所以oracle就会认为这是两条完全不同的语句。而如果将上述SQL改写成select * from tab1 where col1=:var1;,然后通过对变量var1的赋值去查询,那么oracle对这条语句第一次会进行hard parse,以后就只进行soft parse。假设某条语句被重复执行了几十万次,那么使用bind var带来的好处是巨大的。一个应用程序如果bind var使用不充分,那么几乎一定会伴随着严重的性能问题。

    绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件,这样的SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定执行。优点是减少硬解析,降低CPU的争用,节省shared_pool ;缺点是不能使用histogram,sql优化比较困难

    oracle通配符和运算符

    用于where比较条件的有: 
      等于:=、<、<=、>、>=、<> 
      包含:in、not in exists、not exists 
      范围:between...and、not between....and 
      匹配测试:like、not like 
      Null测试:is null、is not null 
      布尔链接:and、or、not 
      www.2cto.com  
    通配符: 
      在where子句中,通配符可与like条件一起使用。在Oracle中: 
      %(百分号): 用来表示任意数量的字符,或者可能根本没有字符。 
      _(下划线): 表示确切的未知字符。 
      ?(问号): 用来表示确切的未知字符。 
      #(井号): 用来表示确切的阿拉伯数字,0到9。 
      [a-d](方括号):用来表示字符范围,在这里是从a到d。 
      单引号('):在Oracle中,应该只使用单引号将文本和字符和日期括起来,不能使用引号        (包括单双引号)将数字括起来。 
     
      双引号("):在Oracle中,单双引号含义不同。双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式。 
     
      撇号('):在Oracle中,撇号也可以写成彼此相邻的两个单引号。为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码: 
      select * from l_suppliers where supplier_name like '%''%' 
     
      &符号:在Oracle中,&符号常用来指出一个变量。例如,&fox是一个变量,稍微有点不同的一种&& fox。每当&fox出现在Oracle脚本中时,都会要求您为它提供一个值。而使用&&fox,您只需要在& &fox第一次出现时为它提供变量值。如果想将&符号作为普通的符号使用,则应该关闭这个特性。要想关闭这个特性,可以运行以下的命令: set define off ,这是一个SQLplus命令,不是一个SQL命令。SQLplus设置了SQL在Oracle中运行的环境。 
     
      双竖线(||):Oracle使用双竖线表示字符串连接函数。 
     
      星号(*):select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示0个或任意多个字符。 
     
      正斜杠(/):在Oracle中,用来终止SQL语句。更准确的说,是表示了“运行现在位于缓冲区的SQL代码”。正斜杠也用作分隔项。 
     
      不等于:有多种表达方式:!=、^=、<>、not xxx=yyy、not(xxx=yyy)
  • 相关阅读:
    nginx获取上游真实IP(ngx_http_realip_module)
    配置NFS固定端口
    elasticsearch 占CPU过高
    jdk集合常用方法分析之HashSet和TreeSet
    SparkSQL使用之如何使用UDF
    SparkSQL使用之JDBC代码访问Thrift JDBC Server
    SparkSQL使用之Thrift JDBC server
    SparkSQL使用之Spark SQL CLI
    jdk分析之String
    jdk集合常用方法分析之ArrayList&LinkedList&以及两者的对比分析
  • 原文地址:https://www.cnblogs.com/zx3707/p/5867689.html
Copyright © 2011-2022 走看看