您的位置:首页 > 数据库 > Oracle

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

2004-06-06 11:04 309 查看
感觉他们的思维逻辑不正常





毛病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平台上又没有半点优势。这种东西还不如不用的好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: