許多軟件公司都理解開(kāi)發(fā)不依賴(lài)于特定數(shù)據(jù)庫(kù)類(lèi)型(例如Oracle、SQL Server、DB2)的應(yīng)用程序的重要性,它可以讓客戶們選擇自己習(xí)慣的平臺(tái)。一般來(lái)說(shuō),軟件開(kāi)發(fā)人員都能夠識(shí)別出他們的負(fù)責(zé)數(shù)據(jù)庫(kù)維護(hù)的客戶,和必須使用現(xiàn)有平臺(tái)和個(gè)性化的客戶。
關(guān)于Oracle和SQL Server之間的區(qū)別,已經(jīng)有很多篇文章從企業(yè)的角度和數(shù)據(jù)庫(kù)管理員的角度出發(fā)描寫(xiě)了兩者之間的一般差別。在這篇文章里面,我將會(huì)從應(yīng)用程序的角度向你描述SQL erver 和oracle平臺(tái)之間的區(qū)別,并且將會(huì)討論開(kāi)發(fā)不依賴(lài)于數(shù)據(jù)庫(kù)環(huán)境的應(yīng)用程序的幾種可能的方法。與此同時(shí),我不會(huì)再論討對(duì)于應(yīng)用程序來(lái)說(shuō),兩個(gè)平臺(tái)之間顯而易見(jiàn)的區(qū)別,例如表的分割和索引。
定義通用接口和語(yǔ)言有很少的幾種通用語(yǔ)言和接口可以讓?xiě)?yīng)用程序不依賴(lài)于數(shù)據(jù)庫(kù),想來(lái)也可以以同樣的方式應(yīng)用在關(guān)系型數(shù)據(jù)庫(kù)上面: ANSI是美國(guó)國(guó)家標(biāo)準(zhǔn)局定義的,這是一家志愿者成員的組織(用私人基金運(yùn)轉(zhuǎn)),他們?cè)谟嘘P(guān)設(shè)備和程序等廣泛領(lǐng)域內(nèi)開(kāi)發(fā)了國(guó)家承認(rèn)的標(biāo)準(zhǔn)。在數(shù)據(jù)庫(kù)領(lǐng)域, ANSI定義了編寫(xiě)SQL命令的標(biāo)準(zhǔn),假設(shè)命令可以運(yùn)行在任何的數(shù)據(jù)庫(kù)上,而不需要更改命令的語(yǔ)法。
ODBC是開(kāi)放數(shù)據(jù)庫(kù)連接(ODBC)接口,微軟定義的,它可以讓?xiě)?yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中的數(shù)據(jù),使用SQL作為訪問(wèn)數(shù)據(jù)的標(biāo)準(zhǔn)。ODBC允許最大的互聯(lián)性,這意味著一個(gè)單個(gè)的應(yīng)用程序可以訪問(wèn)不同的數(shù)據(jù)庫(kù)管理系統(tǒng)。然后,應(yīng)用程序終端用戶可以添加開(kāi)放數(shù)據(jù)庫(kù)連接(ODBC)數(shù)據(jù)庫(kù)驅(qū)動(dòng)來(lái)將應(yīng)用程序與他們所選擇的數(shù)據(jù)庫(kù)管理系統(tǒng)鏈接上。 OLE DB是ODBC的繼承者,是一組允許例如基于VB、C++、Access等任何可以連接到類(lèi)似SQL Server、Oracle、DB2、MySQL等后臺(tái)的“前臺(tái)”的軟件組件。在許多種情況下,OLE DB組件都比原有的ODBC提供了好得多的性能。
JDBC(Java數(shù)據(jù)庫(kù)連接)應(yīng)用程序接口是Java編程語(yǔ)言和廣泛范圍的數(shù)據(jù)庫(kù),SQL數(shù)據(jù)庫(kù)和其他表列數(shù)據(jù)源(例如電子表格或者普通文本文件)之間,進(jìn)行不依賴(lài)于數(shù)據(jù)庫(kù)的連接的行業(yè)標(biāo)準(zhǔn)。JDBD應(yīng)用程序接口為基于SQL的數(shù)據(jù)庫(kù)訪問(wèn)提供了調(diào)用級(jí)別的應(yīng)用程序接口。真實(shí)世界中的通用接口不幸的是,并不是所有數(shù)據(jù)庫(kù)級(jí)別的命令都是ANSI,每個(gè)數(shù)據(jù)庫(kù)平臺(tái)都有自己的擴(kuò)展功能。對(duì)于ANSI或者通用接口,一般來(lái)說(shuō)都代表著幾本功能,因此也可能意味著喪失了性能方面的競(jìng)爭(zhēng)力。對(duì)于小型數(shù)據(jù)庫(kù)和小型應(yīng)用程序來(lái)說(shuō),要維護(hù)對(duì)數(shù)據(jù)庫(kù)的通用訪問(wèn)是簡(jiǎn)單的,但是當(dāng)數(shù)據(jù)庫(kù)和/或應(yīng)用程序變得越來(lái)越大,越來(lái)越復(fù)雜,你就不得不向代碼中添加功能。
SQL Server和Oracle的常用函數(shù)對(duì)比
---------數(shù)學(xué)函數(shù)
1.絕對(duì)值
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual
3.取整(?。?/P>
S:select floor(-1.001) value O:select floor(-1.001) value from dual
4.取整(截?。?/P>
S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual
5.四舍五入S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346
6.e為底的冪S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182
7.取e為底的對(duì)數(shù)S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451)value from dual; 1
8.取10為底對(duì)數(shù)
S:select log10(10) value 1
O:select log(10,10) value from dual; 1
9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from dual 16
10.取平方根
S:select SQRT(4) value 2
O:select SQRT(4) value from dual 2
11.求任意數(shù)為底的冪S:select power(3,4) value 81 O:select power(3,4) value from dual 81
12.取隨機(jī)數(shù)
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual;
13.取符號(hào)
S:select sign(-8) value -1
O:select sign(-8) value from dual -1
----------三角函數(shù)相關(guān)
14.圓周率S:SELECT PI() value 3.1415926535897931
O:不知道
15.sin,cos,tan 參數(shù)都以弧度為單位
例如:select sin(PI()/2) value得到1(SQLServer)
16.Asin,Acos,Atan,Atan2 返回弧度
17.弧度角度互換(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------數(shù)值間比較
18. 求集合最大值
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select greatest(1,-2,4,3) value from dual
19. 求集合最小值
S:select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select least(1,-2,4,3) value from dual
20.如何處理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄