Chen Yangjian's Blog

Carpe diem - Seize the day

Oracle 与 Sybase 的些许差别

| Comments

我不是数据库管理大牛,也不想将 DBA 做为职业发展方向。因为数据库个人的感觉一直冗长和冷冰冰,特别是维护已有数据的时候。

但是为了搵二餐,活还是要干的。最近忙活的事情是改程序,把原有的操作 Sybase 的 SQL 改写成 Oracle 上能跑的。最近的一个程序是个 Java 写的守护进程,编码风格诡异,编码方式拖沓,一个函数数百行是家常便饭。然而 SQL 才是让我痛不欲生的根源。

绝大部分 SQL 都有一个共同点那就是长,如果关系到临时表的创建,多张表的更新等,很是折腾。

关于两个数据库之间的差别,其实组里有个文档,不过关系到保密协议啦工作守则啦之类的玩意,我就干脆没看……

小差别比如,在概念上 sybase 是分为 database,oracle 则是 schema;前者跟 mysql 的 database 是差不多的,也是一样的 use foobase; 之后再操作。也可以 db..table 来访问特定表,而 oracle 里头,则是一个点,schema.table。

然后是临时表,sybase 的叫做 #temp 之类,oracle 则没有那个 #。命名上的些微差别还是好办的,然后实际操作起来就囧了。sybase 允许动态创建,可以直接 select * into #tmp from blah; Oracle 则需要预先处理好历史表的定义,换来的好处是,不需要在 insert into temp select * from blah 的时候再为 column 的类型担忧,如果某个 column 没有值,插入 null 就是了。而 Sybase 因为有临时表的定义混在里头,需要一坨乱七八糟的 convert()。

再比如关系到多张表的 update,Sybase 是可以直接搞的,Oracle 则需要用 rowid 来做,如果比较复杂,还得写 Stored Procedure。还有就是之前提到的日期,函数啦,接收的格式啦,大相径庭。其他的用来 format 浮点数,concat 字符串之类的函数,也有差别。

此外,Sybase 允许多个木有用 “;” 分开的木有返回值(数据集)语句一并执行下来,在 isql 客户端里头,打完一串,再“go”一下也就是了。而 Oralce,如果都丢在一个一串里头的话,需要用“;”分开,并在开头与结尾加上 begin、end;。

以上,就是调戏了我近两周的jr。

Comments