• 怀疑做Oracle的人思维方式是不是有点秀逗


    感觉他们的思维逻辑不正常

    毛病1:

    选择表中人员名字非空的所有人

    在微软的mssqlserver中以下两句
       select * from person_name where person_name <>'';
       select * from person_name where person_name is not null;
    在自然语言的语意上是一样的。执行结果也都正常。


    但在oracle中。
    select * from person_name where person_name <>'';
        结果竟是一条记录也没有,也没有报错。
      一定要写成
       select * from person_name where person_name is not null;
    但是选出所有人名不是'小王'的人时。用如下语句
    select * from person_name where person_name <>'小王'';
    Oracle的结果又是对的。

    毛病2:
    这个毛病在实际开发中碰上的。超难找。害我郁闷了半天,而且现在也没有分析出为什么。我想没有多少人敢说自己十分的清楚Oracle的RowNum是在什么时候,怎么一步步排出来的。

    先说一下原理

    Oracle分页原理。
    //有兴趣的可以google <<Hibernate分页查询原理解读>>一文

    public String getLimitString(String sql) {
      StringBuffer pagingSelect = new StringBuffer(100);
      pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
      pagingSelect.append(sql);
      pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
      return pagingSelect.toString();
    }
    Oracle采用嵌套3层的查询语句结合rownum来实现分页,这在Oracle上是最快的方式

    其中入参sql 可以为任意的SQL语句。


    在实际用时我在250多个分页列表页里用都是正常的。但是就是有一个页面。真是怪。翻几页。就会出现最后一条不会更新的情况。:(

    当时那条语句是这样的。
    string sel_sql="SELECT ORGANIZE.ID, ORGANIZE.TITLE,ORGANIZE_TYPE.NAME TypeName FROM ORGANIZE, ORGANIZE_TYPE WHERE   ORGANIZE_TYPE.ORGTYPE_ID = ORGANIZE.ORGTYPE_ID and  ORGANIZE_TYPE.sts='A' and  ORGANIZE.OFFICE_ID=128    order by TypeName  ";

       TzhPager1.SelectCommand=sel_sql; 
       TzhPager1.CurrentPageIndex = 0;
       TzhPager1.DataBind();

    查不出原因。看了半天。逻辑上没有地方不对呀。

    最后我把“order by TypeName“ 改成了“order by TypeName Desc “    TMD显示又正常了。Oracle真是有病。

    还不如去用个不要钱的mysql也比它好用。:(至少人家还有limit(m,n)直接拿来用。

    Oracle这东东胖的猪一样。装一下硬盘用起来就是以G算。内存占用真是霸道。用起来思维逻辑又老让人想不通。装在windows平台上又没有半点优势。这种东西还不如不用的好。

  • 相关阅读:
    无线放大器扩展后,无线网络上不了网的问题解决
    可变现净值
    三大PLM厂商
    CF #589 (Div. 2) D. Complete Tripartite 构造
    CF #589 (Div. 2)C. Primes and Multiplication 快速幂+质因数
    BZOJ 4025 二分图 LCT维护最大生成树
    BZOJ3791 作业 动态规划
    luogu 2943 [USACO09MAR]清理Cleaning Up 动态规划
    luogu 4909 [Usaco2006 Mar]Ski Lift 缆车支柱 动态规划
    SP1716 GSS3(线段树+矩阵乘法)
  • 原文地址:https://www.cnblogs.com/tongzhenhua/p/13734.html
Copyright © 2020-2023  润新知