怀疑做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平台上又没有半点优势。这种东西还不如不用的好。
。
毛病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平台上又没有半点优势。这种东西还不如不用的好。
相关文章推荐
- Oracle的思维方式(2)
- 《把握健康的金钥匙》知识有点陈旧,更糟糕的是思维方式跟不上时代。二星推荐
- SQL——以面向集合的思维方式来思考
- oracle优化案例2-两种优化方式的比较-sidy
- oracle中对db的不同命名方式
- 思维方式和思维方法
- 在win7 64 位系统下用access 通过链表方式连接oracle,提示不能标识的连接字符串
- 【方法整理】Oracle 获取trace跟踪文件名的几种常用方式
- oracle被锁住后的处理方式,错误Code:ora-00054
- Oracle 输出方式
- ORACLE空间管理实验1:探索LMT表空间管理下数据文件头的结构及位图中区的记录方式
- 测试人员应具备的几种思维方式,你是否也具备了?
- oracle通过dbms_output方式显示存储过程sql
- 人的第一思维方式
- oracle归档日志满了处理方式
- ORACLE修改数据库的归档方式
- oracle的操作系统认证(connect as sysdba)登录方式
- Codeforces 534B Covered Path【有点奇怪的思维+贪心】
- 用命令行方式开启和关闭oracle服务
- Oracle并行更新的两种方式(merge/update内联视图)