使用oracle和sqlserver的几点区别【转】
生活随笔
收集整理的這篇文章主要介紹了
使用oracle和sqlserver的几点区别【转】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.部分SQL語句差異 (1)SQL:select top 10 * from table
ORA: select * from table where rownum<11
(2)SQL:Select * from t1 join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1=t2.c1
(3)select * from t1 left join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1=t2.c1(+)
(4)SQL:select * from t1 right join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1(+)=t2.c1 2. 其他技術差異
GPRS技術可以應用的領域有:
◆在oracle中,delete語句中的from從句中不能涉及到多個表,要基于多個表進行刪除記錄只有使用子查詢。;
◆在oracle中,update語句不能基于多個表進行修改數(shù)據(jù),要基于多個表進行修改數(shù)據(jù)只有使用子查詢;
◆在oracle中,存儲過程不能返回記錄集,如果要存儲過程返回記錄集,可以創(chuàng)建視圖,可以單獨執(zhí)行select語句 (注意:并不是說在存儲過程中不能使用select語句,但select只能用于以下情況:insert into table select * from t1 /select col1 into a from table where ……(a為一變量));
◆在oracle中insert 的語法是:insert into table values() 或insert into table select * from t1;;
◆Oracle中的日期型常量必須用to_date()函數(shù)得到。;
◆Dual表是一個虛擬表,專門用于測試的目的用,注意dual表的用法:
在sql server中,如果我們項測試某個函數(shù),例如:select convert(int,’13’) ,在 oracle 中這種表示方法是錯誤的,應表示為:select to_number(‘13’) from dual;;
◆得到相差的天數(shù):兩個日期相減,再用ceil或floor函數(shù)取整得到相差的月數(shù):months_between()
◆數(shù)據(jù)類型的轉換;
◆ORACLE中對象名不能超過30個字符。ORACLE中界限符是“”(對應SQLSERVER中的[ ])(我的建議是:最好不要是用界限符,能避免實用系統(tǒng)的保留字就盡量避免);
◆ORACLE中空字符串被看成null;
◆ORACLE中字符的比較是區(qū)分大小寫的;
◆視圖中如果用了order by ,并且order by 從句中的字段名都是別名,那么,在顯示視圖時必須顯示出order by 子句中的所有字段,例如,有下面這樣一個視圖:
create view v
as
select name as c1,address from t1 order by c1
那么在select 該視圖時
select c1,address from v 是正確的, select address from v是錯誤的;
◆關于臨時表的問題
在sqlserver中 create table #table1 (c int);
在oracle 中解決辦法是:
create global temporary table table1(c int) on commit preserve rows
這個table1在數(shù)據(jù)庫中是永久存在的,所以不要是用drop命令,在你的程序中在對這個表進行任何操作之前,先執(zhí)行truncate table table1,切忌不要用drop命令刪除此表。;
◆http://technet.oracle.com/doc/server815.htm這個網(wǎng)站有許多在線教程,但一定要先注冊; 3. 數(shù)據(jù)類型轉換 SQL SERVER ORACLE
bigint NUMBER (19 ,0)
binary (50) RAW (50)
bit NUMBER (1, 0)
char (10) CHAR (10)
datetime DATE
decimal (18 , 0) NUMBER (18, 0)
float FLOAT
image BLOB
int NUMBER (10, 0)
money NUMBER (19 ,4)
nchar (10) CHAR (20)
ntext CLOB
numeric (18 , 0) NUMBER (18 ,0)
nvarchar (50) VARCHAR2 (100)
real FLOAT
smalldatetime DATE
smallint NUMBER (5, 0)
smallmoney NUMBER (10, 4)
sql_variant LONG RAW
text CLOB
timestamp RAW (8) NOT
tinyint NUMBER (3 ,0)
uniqueidentifier LONG RAW
varbinary (50) RAW (50)
varchar (50) VARCHAR2 (50)
ORA: select * from table where rownum<11
(2)SQL:Select * from t1 join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1=t2.c1
(3)select * from t1 left join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1=t2.c1(+)
(4)SQL:select * from t1 right join t2 on t1.c1=t2.c1
ORA: select * from t1,t2 where t1.c1(+)=t2.c1 2. 其他技術差異
GPRS技術可以應用的領域有:
◆在oracle中,delete語句中的from從句中不能涉及到多個表,要基于多個表進行刪除記錄只有使用子查詢。;
◆在oracle中,update語句不能基于多個表進行修改數(shù)據(jù),要基于多個表進行修改數(shù)據(jù)只有使用子查詢;
◆在oracle中,存儲過程不能返回記錄集,如果要存儲過程返回記錄集,可以創(chuàng)建視圖,可以單獨執(zhí)行select語句 (注意:并不是說在存儲過程中不能使用select語句,但select只能用于以下情況:insert into table select * from t1 /select col1 into a from table where ……(a為一變量));
◆在oracle中insert 的語法是:insert into table values() 或insert into table select * from t1;;
◆Oracle中的日期型常量必須用to_date()函數(shù)得到。;
◆Dual表是一個虛擬表,專門用于測試的目的用,注意dual表的用法:
在sql server中,如果我們項測試某個函數(shù),例如:select convert(int,’13’) ,在 oracle 中這種表示方法是錯誤的,應表示為:select to_number(‘13’) from dual;;
◆得到相差的天數(shù):兩個日期相減,再用ceil或floor函數(shù)取整得到相差的月數(shù):months_between()
◆數(shù)據(jù)類型的轉換;
◆ORACLE中對象名不能超過30個字符。ORACLE中界限符是“”(對應SQLSERVER中的[ ])(我的建議是:最好不要是用界限符,能避免實用系統(tǒng)的保留字就盡量避免);
◆ORACLE中空字符串被看成null;
◆ORACLE中字符的比較是區(qū)分大小寫的;
◆視圖中如果用了order by ,并且order by 從句中的字段名都是別名,那么,在顯示視圖時必須顯示出order by 子句中的所有字段,例如,有下面這樣一個視圖:
create view v
as
select name as c1,address from t1 order by c1
那么在select 該視圖時
select c1,address from v 是正確的, select address from v是錯誤的;
◆關于臨時表的問題
在sqlserver中 create table #table1 (c int);
在oracle 中解決辦法是:
create global temporary table table1(c int) on commit preserve rows
這個table1在數(shù)據(jù)庫中是永久存在的,所以不要是用drop命令,在你的程序中在對這個表進行任何操作之前,先執(zhí)行truncate table table1,切忌不要用drop命令刪除此表。;
◆http://technet.oracle.com/doc/server815.htm這個網(wǎng)站有許多在線教程,但一定要先注冊; 3. 數(shù)據(jù)類型轉換 SQL SERVER ORACLE
bigint NUMBER (19 ,0)
binary (50) RAW (50)
bit NUMBER (1, 0)
char (10) CHAR (10)
datetime DATE
decimal (18 , 0) NUMBER (18, 0)
float FLOAT
image BLOB
int NUMBER (10, 0)
money NUMBER (19 ,4)
nchar (10) CHAR (20)
ntext CLOB
numeric (18 , 0) NUMBER (18 ,0)
nvarchar (50) VARCHAR2 (100)
real FLOAT
smalldatetime DATE
smallint NUMBER (5, 0)
smallmoney NUMBER (10, 4)
sql_variant LONG RAW
text CLOB
timestamp RAW (8) NOT
tinyint NUMBER (3 ,0)
uniqueidentifier LONG RAW
varbinary (50) RAW (50)
varchar (50) VARCHAR2 (50)
轉載于:https://www.cnblogs.com/xsmhero/archive/2011/01/19/1938839.html
總結
以上是生活随笔為你收集整理的使用oracle和sqlserver的几点区别【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java线程:线程栈模型与线程的变量
- 下一篇: 李开复老师:微博改变一切