我現要在做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()

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

...全文
305 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
关注

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧