許多軟件公司都理解開發(fā)不依賴于特定數(shù)據(jù)庫類型(例如Oracle、SQL Server、DB2)的應用程序的重要性,它可以讓客戶們選擇自己習慣的平臺。一般來說,軟件開發(fā)人員都能夠識別出他們的負責數(shù)據(jù)庫維護的客戶,和必須使用現(xiàn)有平臺和個性化的客戶。
關于Oracle和SQL Server之間的區(qū)別,已經(jīng)有很多篇文章從企業(yè)的角度和數(shù)據(jù)庫管理員的角度出發(fā)描寫了兩者之間的一般差別。在這篇文章里面,我將會從應用程序的角度向你描述SQL erver 和oracle平臺之間的區(qū)別,并且將會討論開發(fā)不依賴于數(shù)據(jù)庫環(huán)境的應用程序的幾種可能的方法。與此同時,我不會再論討對于應用程序來說,兩個平臺之間顯而易見的區(qū)別,例如表的分割和索引。
定義通用接口和語言有很少的幾種通用語言和接口可以讓應用程序不依賴于數(shù)據(jù)庫,想來也可以以同樣的方式應用在關系型數(shù)據(jù)庫上面: ANSI是美國國家標準局定義的,這是一家志愿者成員的組織(用私人基金運轉),他們在有關設備和程序等廣泛領域內(nèi)開發(fā)了國家承認的標準。在數(shù)據(jù)庫領域, ANSI定義了編寫SQL命令的標準,假設命令可以運行在任何的數(shù)據(jù)庫上,而不需要更改命令的語法。
ODBC是開放數(shù)據(jù)庫連接(ODBC)接口,微軟定義的,它可以讓應用程序訪問數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的數(shù)據(jù),使用SQL作為訪問數(shù)據(jù)的標準。ODBC允許最大的互聯(lián)性,這意味著一個單個的應用程序可以訪問不同的數(shù)據(jù)庫管理系統(tǒng)。然后,應用程序終端用戶可以添加開放數(shù)據(jù)庫連接(ODBC)數(shù)據(jù)庫驅動來將應用程序與他們所選擇的數(shù)據(jù)庫管理系統(tǒng)鏈接上。 OLE DB是ODBC的繼承者,是一組允許例如基于VB、C++、Access等任何可以連接到類似SQL Server、Oracle、DB2、MySQL等后臺的“前臺”的軟件組件。在許多種情況下,OLE DB組件都比原有的ODBC提供了好得多的性能。
JDBC(Java數(shù)據(jù)庫連接)應用程序接口是Java編程語言和廣泛范圍的數(shù)據(jù)庫,SQL數(shù)據(jù)庫和其他表列數(shù)據(jù)源(例如電子表格或者普通文本文件)之間,進行不依賴于數(shù)據(jù)庫的連接的行業(yè)標準。JDBD應用程序接口為基于SQL的數(shù)據(jù)庫訪問提供了調用級別的應用程序接口。真實世界中的通用接口不幸的是,并不是所有數(shù)據(jù)庫級別的命令都是ANSI,每個數(shù)據(jù)庫平臺都有自己的擴展功能。對于ANSI或者通用接口,一般來說都代表著幾本功能,因此也可能意味著喪失了性能方面的競爭力。對于小型數(shù)據(jù)庫和小型應用程序來說,要維護對數(shù)據(jù)庫的通用訪問是簡單的,但是當數(shù)據(jù)庫和/或應用程序變得越來越大,越來越復雜,你就不得不向代碼中添加功能。
SQL Server和Oracle的常用函數(shù)對比
---------數(shù)學函數(shù)
1.絕對值
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為底的對數(shù)S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451)value from dual; 1
8.取10為底對數(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.取隨機數(shù)
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual;
13.取符號
S:select sign(-8) value -1
O:select sign(-8) value from dual -1
----------三角函數(shù)相關
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
更多信息請查看IT技術專欄