• 1.ORACLE 尽量不使用隐式转换


    /*************************************************
    一、主题:ORACLE 尽量不使用隐式转换

    类型转换的两种方式:显示类型转换(Explicit) 自动类型转换(Implicit)

    *************************************************/

    =============================================================================
    1.1.显示转换可读性更强;
        SELECT TO_DATE('1900-01-01','YYYY-MM-DD') FROM DUAL;--正确

    --对比
        SELECT TO_DATE(SYSDATE,'YYYYMMDD') FROM DUAL;--报错:无效的月份

        ALTER SESSION SET NLS_DATE_FORMAT='YYYYMONDD';

        SELECT TO_DATE(SYSDATE,'YYYYMMDD') FROM DUAL;--此时正确:2014-6-26

    --这个修改, 仅仅 修改本次登录的情况。不修改别的会话的。

    1.2.自动类型转换对性能产生不好的影响
    --
        CREATE TABLE TEST1
        (  
            ID   NUMBER(1) NOT NULL PRIMARY KEY,
            NAME VARCHAR(10)
        );
        CREATE unique INDEX IDX_TEST1 ON TEST1(NAME);
       
        INSERT INTO TEST1 VALUES(0,'0');
        INSERT INTO TEST1 VALUES(1,'1');
        INSERT INTO TEST1 VALUES(2,'2');
        INSERT INTO TEST1 VALUES(3,'A');
        INSERT INTO TEST1 VALUES(4,'B');
        INSERT INTO TEST1 VALUES(5,'a');  
        INSERT INTO TEST1(ID)  VALUES(7);           
    --   
        SELECT * FROM TEST1 WHERE NAME = 1;--
        /*  虽然会报错,但是执行计划可以查看
            执行计划:查看没有走索引,可能会误导人
            SELECT STATEMENT, GOAL = ALL_ROWS   2 1 20
                     TABLE ACCESS FULL SYS TEST1 2 1 20
        */
        SELECT * FROM TEST1 WHERE NAME = '1';             
        /*执行计划:走索引
        SELECT STATEMENT, GOAL = ALL_ROWS   0 1 20
        TABLE ACCESS BY INDEX ROWID SYS TEST1 0 1 20
             INDEX UNIQUE SCAN SYS IDX_TEST1 0 1 
        */
       
    1.3.自动转换依赖于上下文,一旦上下文改变,原来的程序可能就不能运行。
    1.4.ORACLE的版本(自动类型转换规则、算法、)变动也可能导致自动类型转换出现问题。
    1.5.自动类型转换与显示转换的时间差不多,最好的办法是避免转换,
        而且左值(column)最好不要进行类型转换,一般都是转换右值(Value)。

      日期为例:  TO_CHAR(DATECOL)='DATESTRING' ,  错误的写法,会导致索引失效;
     
      改为下面这样,才是符合预期的,
      DATECOL = TO_DATE(DATESTRING,'YYYY-MM-DD')
     
    ============================================================================= 

  • 相关阅读:
    OSG快速生成一个带有纹理的四边形Geometry
    Excel计算一列的和sum(A:A)
    如何区分SNAT和DNAT
    openstack 常用命令
    Access an instance through a console
    OpenStack网络指导手册 -基本网络概念
    vlan与交换机端口模式Access,Hybrid,Trunk
    网卡的混杂模式
    What is the difference between provider network and self-service network in OpenStack?
    C/C++程序终止时执行的函数——atexit()函数详解
  • 原文地址:https://www.cnblogs.com/zihuancc/p/3811911.html
Copyright © 2020-2023  润新知