祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 6044|回复: 1

[转贴仅供参考]Oracle9i与SYBASE ASE12.5相比的几个不足

[复制链接]

[转贴仅供参考]Oracle9i与SYBASE ASE12.5相比的几个不足

[复制链接]
JohnPhan

主题

0

回帖

228

积分

注册会员

积分
228
贡献
在线时间
小时
2006-11-9 09:14:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
Oracle9i与SYBASE ASE12.5相比的几个不足
     Oracle9i与ASE12.5分别是世界主流数据库厂商ORACLE、SYBASE公司的主打产品,拥有相当大的市场份额。
本文抛开两者之间在体系结构、技术路线上的差异,纯粹从使用者的角度出发,整理了Oracle9i与
SYBASE Adaptive Server Enterprise 12.5 (简称ASE12.5)相比的几个不足,
至于ASE12.5与Oracle9i相比的不足则不在本文的讨论范围。

1 不支持正则表达式:熟悉Unix/Linux及ASE12.0/12.5的人都知道正则表达式的灵活、功能强大。像“查找所有包含数字的表名称”这样的需求,在ASE12.5中极其简单:
     select name from sysobjects where type=”U” and name like “%[0-9]%”
(这里sysobjects相当于Oracle9i中的all_objects),而Oracle9i的实现要颇费一番周折了,一般情况下很多人都是写一个函数实现,以下就是刚学Oracle的时候写的一个实现该功能的函数:
CREATE OR REPLACE function is_number(p_str in varchar2) return number as  w_char char(1);
i      number :=1;
begin
 while  i <= length(p_str)  loop
  w_char := substr(p_str,i,1);
         if w_char >=0 and w_char<=9 then
          return 1;
         end if;
  i:=i+1;
 end loop;
      return 0;
end; / 在Oracle9i调用一个自定义的PL/
SQL函数开销会很大;远不及ASE12.5的内部实现。

2 UPDATE语句的“蹩脚”,在数据库的应用中,两个表关联update是很常见的,
如有如下两个表:
t_a(id,name,point,…)
t_b(id,point,…)
id均为主键或unique  index,现要实现根据id的对应关系将t_b表上point加至t_a表point。
我们来看Oracle9i与ASE12.5的实现:
/** For Oracle9i **/
Update t_a a Set   a.point=a.point+(select b.point from t_b b  where b.id=a.id)
Where exists
(select 1 from from t_ b where b.id=a.id)
//** For ASE12.0/12.5 **/
Update t_a Set    point=a.point+b.point From  t_a a,t_b b Where  a.id=b.id Go
Oracle9i的语句似乎不顾清晰、容易误解,而且查看执行计划发现t_b表或索引扫描了2遍!ASE12.5只扫描了1遍。
虽然第2遍是逻辑读,但总觉得不甘心;
有时如果t_b表较小,且id上无索引,我宁愿采用cursor方式,多次试验表明 比Create
INDEX+关联UPDATE要快得多。还有就是采用Oracle9i的OLAP特性,用merge 语句来完成。

3 临时表技术的比较:ITEM 存储位置 DDL 数据生命周期 ORACLE9i 任何表空间用户自己维护,
表名是全局(数据库用户)唯一 Session / Transaction
ASE12.5 Tempdb库用户create;用户drop或系统drop,表名Session级,唯一 Session
虽然两者各有所长,但我觉得ASE12.5的实现似乎更得”临时”的精髓—在每个会话期间,“召之即来”,不用担心与别人重名,
#11 #22 #aa  #bb随个人喜好创建,”挥之即去”, 会话结束亦不必显式删除,由系统代劳,不必担心垃圾表存在。

4 Count的问题还是Distinct的问题?
在select 语句使用 distinct  关键字修饰以返回唯一的行集,这在统计分析、剔除重复数据尤为重要,
有时仅想统计一个总数呢?在Oracle9i我第一次是这样写的:
Select count(distinct a,b,c) from my_table
结果语法不对,只好修改为:
Select count(*) from ( select distinct a,b,c from my_table )
方得以通过,心想这一定是distinct惹的祸,但随后发现distinct 被冤枉了,因为即使是:
Select count(a,b,c) from  my_table
也是不行的。只能写成:
Select count(*) from ( select a,b,c from my_table )
但在ASE12.5上无论是Select count(distinct a,b,c) from my_table
还是
Select count(a,b,c) from my_table
均能得出正确结果。

5 数据导入导出工具的比较:Exp/Imp在备份和恢复方面用的比较多,且受版本(高低版本、32bit/64bit)、语言影响较大,
且sqlldr  只能算作导入工具,严格来说Oracle9i没有表数据的文本级的导出工具!
相反,ASE12.5的bcp 的在表数据导入导出方面的很灵活,格式也很简单,很容易做应用程序的输入。
还有视图、存储过程、触发器的导出工具defncopy也很好用;至于Oracle9i,我N+1次遇到以下情况:
问:我怎么得到某个存储过程的代码啊?
答:有没有装client阿?
问:装了!
答:打开Enterprise Manager Console,登录后在方案下面找吧 ……
问:怎么麻烦阿?
答:那你有没有装Toad或者PL/Develop阿,这些工具好用点
问:没有啊!
答:L ...
问:我怎么得到某个存储过程的代码啊?
答:有没有装client阿?
问:装了,可我在主机上啊!
答:那你用sqlplus看罢, set long 300 select text from all_source where name=’YourName’ go
问:哇,怎么麻烦阿
答:L 要是在ASE12.0
问:在ASE12.0 我怎么得到某个存储过程的代码啊?
答:用defncopy 吧
问:怎么用啊
答:我靠,这么简单!你还用问阿!

6 联机备份:虽然Oracle9i提供了冷、热备份技术,但是与ASE12.5基于Open Server技术的联机实时备份Backup
Server相比似乎逊色不少,ASE12.5将备份的介质直接拿到另外一台ASE12.5进行Load,
很快很简单就能获得一个时效性极强的”镜像”数据库环境。
而我觉得Exp/Imp比较琐碎,且限制也较多。
Oracle9i附带的命令行工具如sqlplus exp/imp
sqlldr等,执行时无一例外都将输出时间、版本、版权信息,
给像我这样喜欢用shell处理结果的人来说徒增不少麻烦,相比ASE12.5的isql
bcp defncopy 的干净利落,是Oracle9i的无聊和”自恋”,还是埃里克森的霸气呢?
[此贴子已经被作者于2006-11-13 15:19:28编辑过]
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
ehxz

主题

0

回帖

58万

积分

管理员

积分
588551
贡献
在线时间
小时
2006-11-9 10:32:55 | 显示全部楼层
尺有所短,寸有所长。
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-11-23 03:15 , Processed in 0.030971 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表