oracle与SQL server的语法差异总结
Oracle与SQL Server应用差异对比分析在Oracle中采用伪列rownum 获取结果集中排在前面的部分记录 Eg: 返回结果集中前10条记录 Select * from sysc01 where rownum <=10 Rownum可使用<、<=符号,不可使用>、>=符号,如果使用=号只可=1 2、Rownum列还常用于形成结果集的顺序号,从而可获取一定序号范围的行 Eg: 获取按code排名第10到20行 Select * from (Select a.*,rownum as nrow from tab01 a order by code) where nrow between 10 and 20 Oracle 和 SQL Server 是两种广泛应用的关系型数据库管理系统,它们在语法和功能上存在一定的差异。以下是对两者主要区别的一些详细说明: 1. **伪列 ROWNUM**: 在Oracle中,ROWNUM是一个伪列,用于获取结果集中的部分记录。例如,`SELECT * FROM sysc01 WHERE ROWNUM <= 10` 会返回前10条记录。ROWNUM只能使用小于等于(<, <=)符号,不能使用大于等于(>, >=),并且如果使用等号(=),只能等于1。另外,ROWNUM可以与子查询结合,通过ORDER BY排序后,利用ROWNUM创建顺序号,如:`SELECT * FROM (SELECT a.*, ROWNUM AS nrow FROM tab01 a ORDER BY code) WHERE nrow BETWEEN 10 AND 20`,这样可以获取code字段排名在第10到20之间的行。 2. **存储过程的定义和调用**: - Oracle中,创建存储过程的语法是 `CREATE OR REPLACE PROCEDURE 存储过程名(参数列表) IS...END 存储过程名;`,参数类型无需指定长度,且需明确IN、OUT标识。 - SQL Server中,使用 `CREATE PROCEDURE 存储过程名 (参数列表) AS...`,参数需要指定长度,出参需使用OUTPUT或OUT关键字。调用存储过程时,需要在过程名前加上EXEC关键字。 3. **自定义函数**: - Oracle函数定义如 `CREATE OR REPLACE FUNCTION 函数名 (参数列表) RETURN 返回值类型 IS...END;`,函数可以有IN/OUT参数,支持数据增删改操作和动态SQL。 - SQL Server函数不支持OUT参数,不支持在函数内部进行数据的增删改操作,也不支持动态SQL。调用函数时,需要在函数名前加上dbo.。 4. **游标**: - Oracle的游标声明使用 `DECLARE cursor 游标名 is select语句`,支持直接在FOR循环中使用,简化了游标操作。 - SQL Server的游标声明是 `DECLARE 游标名 cursor for select 语句`,操作游标需要显式地OPEN、FETCH和CLOSE。 5. **变量声明和赋值**: - Oracle中,变量声明如 `Code VARCHAR2(5)`,可以直接赋值 `V_result := 'abcd';`,也可以通过SQL语句 `SELECT code INTO v_code FROM sysc01 WHERE id = 1000` 赋值。 - SQL Server中,变量声明需要 `DECLARE @code VARCHAR(5)`,赋值使用 `SET @result = 'abcd'` 或 `SELECT @code = code, @name = name FROM sysc01 WHERE id = 1000`。 6. **语句结束符**: Oracle的SQL语句以分号`;`结束,而SQL Server通常不需要分号,但添加分号也是允许的。 7. **大小写敏感性**: 默认情况下,Oracle对字符串不区分大小写,但可以通过设置数据库参数使其区分大小写。SQL Server则默认对字符区分大小写。 8. **序列**: - Oracle使用序列对象(如 `CREATE SEQUENCE seq_name`) 来生成自动递增的数字,而在表中没有对应的自动增长列。 - SQL Server则在表中有一个自动增长列(如 `IDENTITY`),无需单独创建序列对象。 9. **SELECT语法**: - Oracle允许将查询结果集作为一个临时表使用,如 `SELECT * FROM (SELECT * FROM tab1)`,并且有虚表DUAL,常用于计算与实体表无关的表达式。 - SQL Server也支持类似的操作,但通常需要明确为子查询分配别名。 这些对比可以帮助开发者理解和适应在Oracle与SQL Server之间切换时可能遇到的不同语法和使用习惯。理解这些差异对于在两个系统间进行迁移或开发跨平台应用至关重要。











- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Excel操作技巧与函数高效应用(学员版)(1).ppt
- 通信线路技术交底内容.doc
- 2014华师在线电子商务概论作业.doc
- 嵌入式软件调试器的研究与设计的开题报告.docx
- 基于组件式GIS的校园地理信息系统研究的开题报告.docx
- 关于如何优化SQL数据库的性能的几点分析.docx
- 软件测试基本流程与要求知识课件.doc
- Android-Eclipse安装Ant插件.doc
- 基于异构CAD平台的协同设计系统研究的开题报告.docx
- 新形势下企业会计信息化中存在的问题及对策研究-1.docx
- 医药销售管理系统数据库课程设计.doc
- 带工业以太网接口的差压质量流量计研究的开题报告.docx
- GIS在市场营销4P理论中的应用.doc
- 萌宠网站推广方案.pptx
- 预防接种客户端软件培训.ppt
- C++中构造函数的使用.docx


