1. SQL Server: Oracle: Select top 1 * from tablename Select * from tablename where rownum < 2
Select A.*, B.* from A left Join B on A.bh=B.bh Select A.*, B.* from A, B where A.bh=B.bh(+)
Select A.*, B.* from A right join B where A.bh=B.bh //oracle 9i 以后也支持了 Select A.*, B.* from A, B where A.bh(+)=B.bh
Select * from tablename where lrsj >= ‘2002-11-11’ Select * from tablename where lrsj>= to_date(‘2002-11-11’,’yyyy-mm-dd’)
Select getdate() Select sysdate from dual
Select Field1+Field2 from A Select Field1 || Field2 from A (指字符串的)
Oracle和SQL Server的語(yǔ)句區(qū)別 1.Oracle如何實(shí)現(xiàn)自增列 如果你一直都是用SQL Server作為開(kāi)發(fā)數(shù)據(jù)庫(kù)的,而新的項(xiàng)目需要使用Oracle數(shù)據(jù)庫(kù),那么你會(huì)突然發(fā)現(xiàn)SQL Server和Oracle還是有著很大的差別的。首先,我在SQL Server中用得很順手的自增長(zhǎng)字段就在Oracle中找不到了,取而代之,Oracle可以用序列來(lái)實(shí)現(xiàn)。示例如下。
2.Parameter的區(qū)別 在SQL Server中我們可以按以下方式使用SQL語(yǔ)句:"Insert into Table (Field1,field2) values(@Value1,@Value2)",然后我們?cè)賜ew 幾個(gè)Paramter:new SqlParameter("@Value1",value)... 在查詢(xún)字符串中使用@+字符來(lái)描述參數(shù),在SqlParameter中的參數(shù)名也要使用"@"符號(hào)。而在Oracle中SQL語(yǔ)句不能使用@符號(hào),以冒號(hào)":"代替,如:
3.存儲(chǔ)過(guò)程的不同 Oracle中的存儲(chǔ)過(guò)程叫做包(Packages),一個(gè)包分為包頭和包體,類(lèi)似于C++中的類(lèi)聲明。包頭定義了存儲(chǔ)過(guò)程的名稱(chēng)和參數(shù),包體除了名稱(chēng)和參數(shù),還包括存儲(chǔ)過(guò)程的所有語(yǔ)句。與SQL Server不同,在Oracle中存儲(chǔ)過(guò)程一般寫(xiě)成Function,而不是Procedure。Oracle存儲(chǔ)過(guò)程并不直接返回記錄集,記錄集以游標(biāo)的形式通過(guò)參數(shù)返回。一個(gè)包(Packages)可以包含多個(gè)存儲(chǔ)過(guò)程,使用存儲(chǔ)過(guò)程時(shí)采用"包名.存儲(chǔ)過(guò)程名"的方式,下面是一個(gè)典型的Oracle存儲(chǔ)過(guò)程,它位于名稱(chēng)為"Test"的包(Packages)中,它的使用方式應(yīng)為T(mén)est.GetList。
1、基本SQL語(yǔ)句的區(qū)別 l SELECT 語(yǔ)句 l SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合運(yùn)算符??墒褂?SQL Server EXISTS 和 NOT EXISTS 子句,實(shí)現(xiàn)相同的結(jié)果。 下面兩條語(yǔ)句返回的數(shù)據(jù)是相同的。
下面兩條語(yǔ)句返回的數(shù)據(jù)是相同的。
l 將 SELECT 語(yǔ)句做為表名使用 Microsoft SQL Server 和 Oracle 均支持在執(zhí)行查詢(xún)時(shí),把 SELECT 語(yǔ)句作為表的來(lái)源使用。SQL Server 需要一個(gè)別名;Oracle別名的使用是可選的。
l INSERT 語(yǔ)句 T-SQL 語(yǔ)言支持對(duì)表和視圖的插入,但不支持對(duì) SELECT 語(yǔ)句的 INSERT 操作。如果 Oracle 應(yīng)用程序代碼執(zhí)行對(duì) SELECT 語(yǔ)句的插入操作,則必須對(duì)它進(jìn)行修改。如:
Transact-SQL values_list 參數(shù)提供了 SQL-92 標(biāo)準(zhǔn)關(guān)鍵字 DEFAULT,但 Oracle 不支持。此關(guān)鍵字指定了執(zhí)行插入操作時(shí)使用列的默認(rèn)值。如果指定列的默認(rèn)值不存在,則插入 NULL。如果該列不允許 NULL,則返回一個(gè)錯(cuò)誤消息。如果該列數(shù)據(jù)類(lèi)型定義為 timestamp,則插入下一個(gè)有序值。 l DELETE 語(yǔ)句 如果要對(duì) Oracle 中的 SELECT 語(yǔ)句執(zhí)行刪除操作,則必須修改 SQL Server 語(yǔ)法,因?yàn)?Transact-SQL 不支持這一功能。 Transact-SQL 支持在 WHERE 子句中使用子查詢(xún),以及在 FROM 子句中使用聯(lián)接。后者可產(chǎn)生更有效的語(yǔ)句。請(qǐng)參見(jiàn)后面“UPDATE 語(yǔ)句”中的示例。
l EXISTS
2、表數(shù)據(jù)復(fù)制 l 庫(kù)內(nèi)數(shù)據(jù)復(fù)制 MS SQL Server Insert into 復(fù)制表名稱(chēng) select語(yǔ)句 (復(fù)制表已存在) Select 字段列表 into 復(fù)制表名稱(chēng) from 表(復(fù)制表不存在) Oracle Insert into 復(fù)制表名稱(chēng) select語(yǔ)句(復(fù)制表已存在) create table 復(fù)制表名稱(chēng) as select語(yǔ)句(復(fù)制表不存在) l 文本文件轉(zhuǎn)入、轉(zhuǎn)出的批量處理 MS SQL Server
BCP命令行程序
Oracle
SQLLDR命令行程序 3、表數(shù)據(jù)更新 l 根據(jù)其它表數(shù)據(jù)更新你要更新的表。 MS SQL Server Update A SET 字段1=B字段表達(dá)式 字段2=B字段表達(dá)式 From B WHERE 邏輯表達(dá)式
如: UPDATE titles SET ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
Oracle Update A SET 字段1=(select 字段表達(dá)式 from B WHERE) 字段2=(select 字段表達(dá)式 from B WHERE) WHERE 邏輯表達(dá)式
假如A需要多個(gè)字段更新,顯然MS SQL 語(yǔ)句更簡(jiǎn)練。 l T-SQL UPDATE 語(yǔ)句不支持對(duì) SELECT 語(yǔ)句的更新操作。 如果 Oracle 應(yīng)用程序代碼對(duì) SELECT 語(yǔ)句進(jìn)行更新,則可以把 SELECT 語(yǔ)句轉(zhuǎn)換成一個(gè)視圖,然后在 SQL Server UPDATE 語(yǔ)句中使用該視圖名稱(chēng)。請(qǐng)參見(jiàn)前面“INSERT 語(yǔ)句”中的示例。
Oracle UPDATE 命令只能使用一個(gè) PL/SQL 塊中的程序變量。而Transact-SQL 語(yǔ)言并不需要使用塊。 如下圖:
在 SQL Server 中,DEFAULT 關(guān)鍵字可用于將一列設(shè)為其默認(rèn)值。但不能使用 Oracle UPDATE 命令,將一列設(shè)為默認(rèn)值。 Transact-SQL 和 Oracle SQL 均支持在 UPDATE 語(yǔ)句中使用子查詢(xún)。但是,Transact-SQL FROM 子句可用來(lái)創(chuàng)建一個(gè)基于聯(lián)接的 UPDATE。這一功能使 UPDATE 語(yǔ)法可讀性更好,在某些情況下還能改善性能。
|
聯(lián)系客服