Oracle和SQL SERVER在SQL语句上的差别

Oracle与Sql server都遵循SQL-92标准:http://owen.sj.ca.us/rkowen/howto/sql92F.html,但是也有一些不同之处,差别如下:

  1. Oracle中表名,字段名,存储过程名,变量名不能超过30个字符串长度。
  2. Oracle中不支持Top 语法。使用whererownum < n 代替。但需要注意如果在Top前有排序的操作,则需要先排序在利用rownum取得。
  3. Oracle中光标的使用与SqlServer中有挺大差别,主要是在循环控制方面不一致。
  4. 在 Oracle中如果某列是Date类型,那么它默认的格式是yyyy-MM-dd,如果使用where colDate = ‘2005-06-08 17:14:57’就会出错,‘2005-06-08’可以。如果此时需要精确比较时间(小时,分,秒),可以采用下列方 法:TO_DATE(‘2005-6-8 17:14:57‘,‘yyyy-mm-dd hh24:mi:ss‘)。由于Oracle和SQLServer在DateTime上对SQL标准的拓展实现方式不同,因此不能用同一个SQL实现。
  5. Oracle 中的TimeStamp(时间戳)与SqlServer中的差别很大。SqlServer中的TimeStamp是二进制格式存储在数据库中,可以将 DataSet中的这个字段类型设定为base64Binary类型。Oracle中的TimeStamp是时间格式存储的。因此,无法用同一个 DataSet既装载SqlServer的TimeStamp,有装载Oracle的TimeStamp.由于在应用程序中很少用到这个值,因此可以不检 索这个字段。
  6. Oracle中的TimeStamp不能像SqlServer在传入数据的时候自动填充,可以设定默认值systimestamp来实现类似功能。
  7. Oracle中没有Boolean的字段类型,可以用intger或者char代替SqlServer中的bit类型。
  8. Oracle 中会将””空字符串当多NULL处理,也就是说,当应用程序往数据库中插入一个空字符串时,实际数据库会尝试插入一个NULL。如果这个字段是 NOTNULL类型,那么就会出错,这种情况下可以用别的默认值代替空字符串。当从SqlServer导入数据到Oracle的时候,在NOTNULL列 上的空字符串会导致导出操作失败。此时可以在导出向导中手工修改SQL脚本,将空字符串设定成一个特殊值。
  9. Oracle中不支持,SELECT . . INTO创建新表,要用CREATE TABLE 表名AS SELECT 语句 ,创建新表。
  10. 在Oracle中连接字符串用 ‘||’ 或CONCAT(COL1,COL2)函数,不能使用‘+’。
  11. 统配符 [],[^] ,Oracle好像也不支持。
  12. 可以使用 &变量句 当变量使用,在执行时会要求输入 变量名对应的值

oracle通配符,运算符的使用
  用于where比较条件的有:
  等于:=、<、<=、>、>=、<>
  包含:in、not in exists、not exists
  范围:between...and、not between....and
  匹配测试:like、not like
  Null测试:is null、is not null
  布尔链接:and、or、not
  通配符:
  在where子句中,通配符可与like条件一起使用。在Oracle中:
  %(百分号): 用来表示任意数量的字符,或者可能根本没有字符。
  _(下划线): 表示确切的未知字符。
  ?(问号): 用来表示确切的未知字符。
  #(井号): 用来表示确切的阿拉伯数字,0到9。
  [a-d](方括号):用来表示字符范围,在这里是从a到d。
  单引号(‘):在Oracle中,应该只使用单引号将文本和字符和日期括起来,不能使用引号(包括单双引号)将数字括起来。
  双引号("):在Oracle中,单双引号含义不同。双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式。
  撇号(‘):在Oracle中,撇号也可以写成彼此相邻的两个单引号。为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码:
  select * from l_suppliers where supplier_name like ‘%‘‘%‘
 
 &符号:在Oracle中,&符号常用来指出一个变量。例如,&fox是一个变量,稍微有点不同的一种&&
fox。每当&fox出现在Oracle脚本中时,都会要求您为它提供一个值。而使用&&fox,您只需要在&
&fox第一次出现时为它提供变量值。如果想将&符号作为普通的符号使用,则应该关闭这个特性。要想关闭这个特性,可以运行以下的命令:
set define off ,这是一个SQLplus命令,不是一个SQL命令。SQLplus设置了SQL在Oracle中运行的环境。
  双竖线(||):Oracle使用双竖线表示字符串连接函数。
  星号(*):select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示0个或任意多个字符。
  正斜杠(/):在Oracle中,用来终止SQL语句。更准确的说,是表示了“运行现在位于缓冲区的SQL代码”。正斜杠也用作分隔项。
  多行注释:/*......*/。
  不等于:有多种表达方式:!=、^=、<>、not xxx=yyy、not(xxx=yyy)

时间: 2024-10-24 01:21:02

Oracle和SQL SERVER在SQL语句上的差别的相关文章

【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Se

SQL Server中DML语句要申请的锁

对于select语句: 1.当采用表扫描时,会直接锁定page,而不是锁定具体的某条记录,所以会有这些锁: A.数据库S锁 B.表的IS锁 C.页的S锁 2.当采用索引来查找数据时,会锁定具体的记录,所以会有这些锁: A.数据库S锁 B.索引中page的IS锁 C.索引中page中的key的S锁 D.表的IS锁 E.页的IS锁 F.RID的S锁 3.对于读过的页面,会加一个IS锁. 对于使用的索引,会对key加上S锁,对索引key所在的页面会加上IS锁. 在查询过程中,会对每一条读到的记录或ke

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

细说Sql Server中的视图(上)转载

原文:细说Sql Server中的视图(上)http://www.cnblogs.com/xbf321/archive/2009/06/16/view_in_sqlserver.html 1,什么是视图? 2,为什么要用视图: 3,视图中的ORDER BY; 4,刷新视图: 5,更新视图: 6,视图选项: 7,索引视图: 细说Sql Server中的视图(下)   应大家要求已在“细说Sql Server中的视图(上)”中添加“为什么要用视图”一小节. 1.什么是视图 视图是由一个查询所定义的虚

[Oracle][ODBC SQL Server Driver][SQL Server]对象名 &#39;RECOVER.HS_TRANSACTION_LOG&#39; 无效(转)

原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin  update  某个sqlserver的表@dblink名字 .....;  update 某个oracle的表...;end; 这段pl/sql执行会报错:错误信息是:-----------------------------------------------------------------执行失败:ORA-02054: 事务处理 2.12.27634 有问题

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Serv

SQL server 查看什么语句在使用临时表

SQL server 查询那些语句在使用临时表 最近在日常的性能测试工作中发现,数据库端的IO读写比较大,有规律的2-8M的波动,数据库的版本为 SQL server 2008 sp3. 这些IO操作主要来自于临时表,在测试之前,我们已经对部分消耗资源较多的语句进行了跟踪. 对一些使用临时表的语句进行了修改,但是肯定还是有落网之鱼.我们需要对其进行甄别,做到进一步的优化. 在开始之前,我们先来了解下什么样的操作会使用到临时表: 时的用户对象, 比如临时表,表变量等(#,##,@开头的一些变量)

SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)

本文从零开始一步一步介绍如何在Ubuntu上搭建SQL Server 2017,包括安装系统.安装SQL等相关步骤和方法(仅供测试学习之用,基础篇). 一.   创建Ubuntu系统(Create Ubuntu System) 1.      前提准备 由于本文主要研究SQL Server 2017在Linux上的搭建方法,从Install SQL Server on Linux中得知当前SQL Server 2017 CTP 2.0对于Ubuntu系统支持16.04和16.10,同时可以直接下

SQL SERVER 查看SQL语句IO,时间,索引消耗

1.查看SQL语句IO消耗 set statistics io on     select * from dbo.jx_order where order_time>'2011-04-12 12:49:57.580' set statistics io off 2.查看SQL语句时间消耗 set statistics time on      select * from dbo.jx_order where order_time>'2011-04-12 12:49:57.580' set st

连接SQL Server执行SQL语句

public static DataTable GetData() { string Connect = ConfigurationManager.AppSettings["ConnectionString"].ToString(); SqlConnection sc = new SqlConnection(Connect); sc.Open(); SqlCommand cm = new SqlCommand("select * from Department");