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的语句区别 1.Oracle如何实现自增列 如果你一直都是用SQL Server作为开发数据库的,而新的项目需要使用Oracle数据库,那么你会突然发现SQL Server和Oracle还是有着很大的差别的。首先,我在SQL Server中用得很顺手的自增长字段就在Oracle中找不到了,取而代之,Oracle可以用序列来实现。示例如下。
2.Parameter的区别 在SQL Server中我们可以按以下方式使用SQL语句:"Insert into Table (Field1,field2) values(@Value1,@Value2)",然后我们再new 几个Paramter:new SqlParameter("@Value1",value)... 在查询字符串中使用@+字符来描述参数,在SqlParameter中的参数名也要使用"@"符号。而在Oracle中SQL语句不能使用@符号,以冒号":"代替,如:
3.存储过程的不同 Oracle中的存储过程叫做包(Packages),一个包分为包头和包体,类似于C++中的类声明。包头定义了存储过程的名称和参数,包体除了名称和参数,还包括存储过程的所有语句。与SQL Server不同,在Oracle中存储过程一般写成Function,而不是Procedure。Oracle存储过程并不直接返回记录集,记录集以游标的形式通过参数返回。一个包(Packages)可以包含多个存储过程,使用存储过程时采用"包名.存储过程名"的方式,下面是一个典型的Oracle存储过程,它位于名称为"Test"的包(Packages)中,它的使用方式应为Test.GetList。
1、基本SQL语句的区别 l SELECT 语句 l SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合运算符。可使用 SQL Server EXISTS 和 NOT EXISTS 子句,实现相同的结果。 下面两条语句返回的数据是相同的。
下面两条语句返回的数据是相同的。
l 将 SELECT 语句做为表名使用 Microsoft SQL Server 和 Oracle 均支持在执行查询时,把 SELECT 语句作为表的来源使用。SQL Server 需要一个别名;Oracle别名的使用是可选的。
l INSERT 语句 T-SQL 语言支持对表和视图的插入,但不支持对 SELECT 语句的 INSERT 操作。如果 Oracle 应用程序代码执行对 SELECT 语句的插入操作,则必须对它进行修改。如:
Transact-SQL values_list 参数提供了 SQL-92 标准关键字 DEFAULT,但 Oracle 不支持。此关键字指定了执行插入操作时使用列的默认值。如果指定列的默认值不存在,则插入 NULL。如果该列不允许 NULL,则返回一个错误消息。如果该列数据类型定义为 timestamp,则插入下一个有序值。 l DELETE 语句 如果要对 Oracle 中的 SELECT 语句执行删除操作,则必须修改 SQL Server 语法,因为 Transact-SQL 不支持这一功能。 Transact-SQL 支持在 WHERE 子句中使用子查询,以及在 FROM 子句中使用联接。后者可产生更有效的语句。请参见后面“UPDATE 语句”中的示例。
l EXISTS
2、表数据复制 l 库内数据复制 MS SQL Server Insert into 复制表名称 select语句 (复制表已存在) Select 字段列表 into 复制表名称 from 表(复制表不存在) Oracle Insert into 复制表名称 select语句(复制表已存在) create table 复制表名称 as select语句(复制表不存在) l 文本文件转入、转出的批量处理 MS SQL Server BCP命令行程序 Oracle SQLLDR命令行程序 3、表数据更新 l 根据其它表数据更新你要更新的表。 MS SQL Server Update A SET 字段1=B字段表达式 字段2=B字段表达式 From B WHERE 逻辑表达式 如: 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 字段表达式 from B WHERE) 字段2=(select 字段表达式 from B WHERE) WHERE 逻辑表达式 假如A需要多个字段更新,显然MS SQL 语句更简练。 l T-SQL UPDATE 语句不支持对 SELECT 语句的更新操作。 如果 Oracle 应用程序代码对 SELECT 语句进行更新,则可以把 SELECT 语句转换成一个视图,然后在 SQL Server UPDATE 语句中使用该视图名称。请参见前面“INSERT 语句”中的示例。 Oracle UPDATE 命令只能使用一个 PL/SQL 块中的程序变量。而Transact-SQL 语言并不需要使用块。 如下图:
在 SQL Server 中,DEFAULT 关键字可用于将一列设为其默认值。但不能使用 Oracle UPDATE 命令,将一列设为默认值。 Transact-SQL 和 Oracle SQL 均支持在 UPDATE 语句中使用子查询。但是,Transact-SQL FROM 子句可用来创建一个基于联接的 UPDATE。这一功能使 UPDATE 语法可读性更好,在某些情况下还能改善性能。
|
![](http://image16.360doc.com/DownloadImg/2010/10/2711/6319207_1.gif)