我現要在做Oracle版的同時進行MSSql版和Oracle版的整合.並列出MSSql和Oracle之間的區別,歡迎大家討論.

zhuzhichao 2001-07-05 01:35:09
有的人可能認為根據MSSql版改Oracle版很好做,
我可不是這麼認為.
我公司是用Java開發,3-Tier.一個程式大概分:
client端 (只進行用戶界面的輸入,對數據不做任何的處理)
server端 (分永久server和臨時server,每個系統有一個永久server,而每個作業都有自己的臨時server.主要進行商務邏輯和計算並進行合法性的檢測)
dba (DatabaseAccess,主要對數據庫進行讀寫操作,每個作業都有自己的dba,因為Java沒有數據窗口,所以對數據庫的每一步操作都是用SQL語句來完成)
而且每個系統中都有許多的*.sql文件,有create database,create table,init data,以及存儲過程和觸發器的生成.大大小小的*.sql文件大約有40多個.而且每個存儲過程的腳本都是不下於200行的.

我現在想在做Oracle版的同時進行MSSql版和Oracle版的整合.client端和server端是不需要動的,而每一個DBA_*.java和sp*.sql及tr*.sql文件都是要增加script和修改script的.(30多個dba,40多個*.sql).現在還有誰認為這項工作在15天之內搞定是很容易的事?

我列出MSSql和Oracle的一些區別,方便大家參考:
MSSql Oracle
Create table時字符型欄位定義 varchar,nvarchar varchar2,nvarchar2
Create table時字符型欄位定義為Isnull 可以為’’ 不可以為’’
語句間的區分符 無限制 必須用分號
Insert 可以用inset 必須用insert into
臨時 table 可以 不可以
Select Top 1 可以 不可以
必須select … from … where rownum=1
字串相加 用 + 運算符 用 || 運算符
賦值語句 Select tt=’TT’ tt :=’TT’
Msqql cursor
DECLARE Curtfm02 CURSOR FOR
SELECT ISNULL(fb09,0) FROM tfm02
WHERE billtype='S' AND nokey=@In_SCNo AND fb03=@In_ItemNo
ORDER BY billtype,nokey,fb03

OPEN tr_sp_calSItemPendAmt_Curtfm02
BEGIN TRAN tr_calSItemPendAmt

FETCH tr_sp_calSItemPendAmt_Curtfm02 INTO @m_fb09;

WHILE @@FETCH_STATUS = 0
BEGIN
…………………………
…………………………

FETCH NEXT FROM Curtfm02 INTO @m_fb09
END

CLOSE Curtfm02
DEALLOCATE Curtfm02


Oracle cursor
CURSOR Curtfm02 IS
SELECT NVL(fb09,0) FROM tfm02
WHERE billtype='S' AND nokey=In_SCNo AND fb03=In_ItemNo
ORDER BY billtype,nokey,fb03 ;

OPEN Curtfm02;
LOOP
FETCH Curtfm02 INTO m_fb09;
EXIT WHEN Curtfm02%NOTFOUND;

…………
…………
END LOOP;
CLOSE Curtfm02;

判斷一個值是否為null Isnull(,) Nvl(,)
Length function Len() Length()
得到 string 的一部分 SubString(,,) substr(,,)
轉換函數 convert() to_char()等
返回大于等于的最小整數 CEILING() CEIL()

還有很多,希望大家討論.

...全文
148 点赞 收藏 15
写回复
15 条回复
zhuzhichao 2001年07月05日
今天要急著回家,明天再來.
回复 点赞
am2000 2001年07月05日
一个表的SQL SERVER脚本:[来源于PD]
if exists (select 1
from sysindexes
where id = object_id('dbo.SDEMPLOYEE')
and name = 'PK_SDEMPLOYEE'
and indid > 0
and indid < 255)
drop index dbo.SDEMPLOYEE.PK_SDEMPLOYEE
go


if exists (select 1
from sysobjects
where id = object_id('dbo.SDEMPLOYEE')
and type = 'U')
drop table dbo.SDEMPLOYEE
go


/*==============================================================*/
/* Table : SDEMPLOYEE */
/*==============================================================*/
create table dbo.SDEMPLOYEE (
EMPLOYEECODE varchar(18) not null,
EMPLOYEENAME varchar(18) not null,
EMPLOYEESEX smallint not null,
EMPLOYEEEDU smallint not null,
EMPLOYEEBORTHDAY varchar(10) not null,
EMPLOYEEIDCARD varchar(20) not null,
EMPLOYEEDEPT varchar(18) not null,
EMPLOYEERANK varchar(18) not null,
EMPLOYEETOW varchar(18) not null,
EMPLOYEESHOP varchar(18) not null,
EMPLOYEETEAM varchar(18) not null,
EMPLOYEECDATE varchar(10) not null,
EMPLOYEELDATE varchar(10) not null,
EMPLOYEESKILL varchar(18) not null,
EMPLOYEEADDR varchar(80) not null,
EMPLOYEEZIP varchar(6) not null,
EMPLOYEETEL varchar(20) not null,
EMPLOYEERPR varchar(80) not null,
EMPLOYEEWCT smallint not null,
EMPLOYEEPHOTO varchar(18) not null,
EMPLOYEEUSER varchar(18) not null,
EMPLOYEESYSDATE datetime not null,
EMPLOYEESTATE smallint not null,
EMPLOYEELR varchar(18) not null,
constraint PK_SDEMPLOYEE primary key (EMPLOYEECODE)
)
go


/*==============================================================*/
/* Index: PK_SDEMPLOYEE */
/*==============================================================*/
create unique index PK_SDEMPLOYEE on dbo.SDEMPLOYEE (
EMPLOYEECODE
)
go





转换为ORACLE后的脚本::[来源于PD]

drop index dbo.PK_SDEMPLOYEE
/


drop table dbo.SDEMPLOYEE cascade constraints
/


/*==============================================================*/
/* Table : SDEMPLOYEE */
/*==============================================================*/


create table dbo.SDEMPLOYEE (
EMPLOYEECODE VARCHAR2(18) not null,
EMPLOYEENAME VARCHAR2(18) not null,
EMPLOYEESEX SMALLINT not null,
EMPLOYEEEDU SMALLINT not null,
EMPLOYEEBORTHDAY VARCHAR2(10) not null,
EMPLOYEEIDCARD VARCHAR2(20) not null,
EMPLOYEEDEPT VARCHAR2(18) not null,
EMPLOYEERANK VARCHAR2(18) not null,
EMPLOYEETOW VARCHAR2(18) not null,
EMPLOYEESHOP VARCHAR2(18) not null,
EMPLOYEETEAM VARCHAR2(18) not null,
EMPLOYEECDATE VARCHAR2(10) not null,
EMPLOYEELDATE VARCHAR2(10) not null,
EMPLOYEESKILL VARCHAR2(18) not null,
EMPLOYEEADDR VARCHAR2(80) not null,
EMPLOYEEZIP VARCHAR2(6) not null,
EMPLOYEETEL VARCHAR2(20) not null,
EMPLOYEERPR VARCHAR2(80) not null,
EMPLOYEEWCT SMALLINT not null,
EMPLOYEEPHOTO VARCHAR2(18) not null,
EMPLOYEEUSER VARCHAR2(18) not null,
EMPLOYEESYSDATE DATE not null,
EMPLOYEESTATE SMALLINT not null,
EMPLOYEELR VARCHAR2(18) not null,
constraint PK_SDEMPLOYEE primary key (EMPLOYEECODE)
)
/


comment on table dbo.SDEMPLOYEE is
'员工资料'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEECODE is
'员工编号'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEENAME is
'员工姓名'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEESEX is
'性别'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEEDU is
'文化程度'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEBORTHDAY is
'出生日期'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEIDCARD is
'身份证号'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEDEPT is
'部门'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEERANK is
'职务'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEETOW is
'工种'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEESHOP is
'所属车间'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEETEAM is
'所属班组'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEECDATE is
'建档日期'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEELDATE is
'离职日期'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEESKILL is
'技术水平'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEADDR is
'地址'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEZIP is
'邮政编码'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEETEL is
'电话'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEERPR is
'户口所在地'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEWCT is
'工资计算方式'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEPHOTO is
'照片'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEEUSER is
'操作员'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEESYSDATE is
'系统日期'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEESTATE is
'当前状态'
/


comment on column dbo.SDEMPLOYEE.EMPLOYEELR is
'离职原因'
/


/*==============================================================*/
/* Index: PK_SDEMPLOYEE */
/*==============================================================*/
create unique index dbo.PK_SDEMPLOYEE on dbo.SDEMPLOYEE (
EMPLOYEECODE ASC
)
/
不知是什么原因,我把在PD中生成的脚本在PB中无法运行,需要修改..所以我想通过PDM直接生成数据库,但在连接的时候老是不成功...
回复 点赞
pbsql 2001年07月05日
顺便帮我看看这个:http://www.csdn.net/expert/topic/180/180742.shtm

谢谢!
回复 点赞
am2000 2001年07月05日
顺便帮我看看:http://www.csdn.net/expert/topic/181/181412.shtm
有了DB,自然就可以获取脚本了...
回复 点赞
am2000 2001年07月05日
哦,在powerdesigner中有一个转换数据库的功能,可以将SQL SERVER 转换为ORACLE数据库...
我只是不知道如何将PDM生成数据库...
回复 点赞
zhuzhichao 2001年07月05日
to am2000(最后一滴水):
SQLServer的腳本太好哢了,在SQLServer就能得到.
但是在powerdesigner中能不能將SQLServer的腳本變成Oracle的腳本?
我不用生成db,只要腳本.
回复 点赞
am2000 2001年07月05日
to caolei1974(梦飞扬):我可没说我会,呵呵

我的想法是用powerdesigner反向工程得到sql server数据库的脚本,然后生成ORACLE数据库..
表、存储过程和触发器都自动生成...
我不知道这样可不可以...凭感觉应该是可以的
如果可以的话,乃是一大幸事
关于powerdesigner,你如果有问题的话,可以去找八哥
祝你好运
回复 点赞
山野村夫 2001年07月05日
学习!!
回复 点赞
caolei1974 2001年07月05日
我用过sybase,sqlserver,informix,就是没有用过oracle,好像一滴水用
回复 点赞
pbsql 2001年07月05日
我来学点oracle知识
回复 点赞
nthb2001 2001年07月05日
倒。。。
八哥也不用oracle?

我还以为只有我不用的呢。。。。
回复 点赞
zhuzhichao 2001年07月05日
MSSql Oracle
If 語句 If (…) If (…) then
Begin …..
….. ….. …..
End Elsif (…) then
Else if (…) …..
Begin ….. ….. …..
End Else
Else …..
Begin …..
….. ….. End if
End

多DB處理 不同的 database 相同的 databases,不同的 userid
回复 点赞
szjlq 2001年07月05日
Oracle,很向往的DBMS,可惜我不会。:-(
回复 点赞
tanye 2001年07月05日
辛苦啦,
有问题一定参与
回复 点赞
rongrong 2001年07月05日
关注
回复 点赞
发动态
发帖子
Sybase
创建于2007-09-28

2408

社区成员

2.5w+

社区内容

Sybase相关技术讨论区
社区公告
暂无公告