Oracle与SQL Server应用差异对比分析 Oracle 10g 项目 存储过程格式 存储过程名(参数列表) IS Begin ---存储过程内容 End 存储过程名; 备注 CREATE OR REPLACE PROCEDURE CREATE PROCEDURE 存储过程名 (参数列表) AS --存储过程内容 SQLServer 2008 1、 指定参数类型,并要指定长度 2、 对于出参需要在类型后面加OUTPUT(或OUT) Eg: @task_remark VARCHAR(10) @prm_code int output 存储过程参数 1、 指定参数类型,但不指定长度 2、 在参数及类型间要加入出标识(IN、OUT) Eg: task_remark IN VARCHAR2 prm_code OUT NUMBER 使用存储过程 1、 直接使用存储过程名 2、 参数在存储过程后面的括号包内列出 Eg: p_wfm_getcolumns(v_tablename,v_tablecolumn); 1、 调用存储过程名前面需要加 exec关键字 2、 参数在存储过程后面逐个列出 3、 出参后面要加关键字output或out Eg: EXEC OUTPUT P_WFM_GETCOLUMNS @tablename,@tablecolumn 自定义函数格式 CREATE OR REPLACE FUNCTION CREATE FUNCTION 函数名 (参数函数名 (参数列表) RETURN 返回值类型 IS BEGIN END; 列表) RETURNs 返回值类型 AS --函数内容 自定义函数内容 1、 指定参数类型,但不指定长度 2、 在参数及类型间要加入出标识(IN、OUT) Eg: task_remark IN VARCHAR2 prm_code OUT NUMBER 1、 指定参数类型,并要指定长度 2、 不支持出参 Eg: @task_remark VARCHAR(10) 3、 支持对数据增、删、改操作 4、 支持动态SQL语句 使用自定义函数 1、 直接使用函数名 Eg: V_result :=f_wfm_isandbegin(flow_id, step_id) 3、 不支持对数据增、删、改操作 4、 不支持动态SQL语句 1、 在函数名前面加上dbo. Eg: Set @result= dbo.f_wfm_isandbegin(@flow_id, @step_id) 游标 1、 游标声明 DECLARE cursor 游标名 is select语句 1、 游标声明 DECLARE游标名cursor for select语句 2、 使用游标过程 打开(open)->提取(fetch)->关闭(close) 3、 支持快捷使用游标,直接使用for循环,数据库会自动打开、提取及关闭游标 变量 1、 变量前不可加@符号 2、 存储过程中变量声明不需要declare Eg: Code varchar2(5); 2、 使用游标过程 打开(open)->提取(fetch)->关闭(close)->销毁( 1、 变量前需要加@符号 2、 变量声明需要使用Declare关键字 Eg: DECLARE @code varchar(5); 3、 变量类型可按表中字段类型动态定义 Eg: V_id sysc01.id%type; 赋值 3、 不支持按表字段类型动态定义 1、 变量直接赋值,变量 := 表达式; 1、 变量直接赋值,Set 变量=表达式; Eg: Eg: v_result := ‘abcd’; Set @result = ‘abcd’ 2、 通过SQL语句 2、 通过SQL语句赋值 Select 表达式 into 变量 from Select 变量=表达式 from 表 Eg: 表 Eg: Select Select code,name into @code=code,@name=name from v_code,v_name from sysc01 sysc01 where id = 1000 Where id = 1000 语句结束符 大小写 序列 Select 语法 SQL语句使用分号 ; 作为语句的结束 Oracle对字符区分大小写 1、 有序列sequence对象,无自动增长列 1、 结果集可做为表使用,使用时可不加别名 Eg: Select * from (select * from tab1) 2、 虚表 dual的使用,对于select计算某些与实体表无关的表达式时,要使用虚表dual Eg: Select round(1/3,2) from dual ; 3、 SQL语句不需要加分号;作为结束符(加也可) 默认对字符不区分大小写,也可修改数据库配置支持区分大小写 1、 无序列对象,表中有自动增长列 1、 结果集可做为表使用,使用时必须加别名 Eg: Select * from (select * from tab1) a 2、 对于Select计算某些与实体表无关的表达式时,可使用不带from的select语句 Eg: Select round(1/3,2) ; 3、 可关联表更新 Eg: Update a set a.value = isnull(b.value,’’) 将a表中value Update语法 不可关联表更新 Eg: For cur in (select a.id,b.value from a inner join b on a.id = b.id ) loop Update a set a.value = cur.value Where a.id = cur.id; End loop; 或 Update a set a.value = (select b.value From b where b.id = a.id ) Delete语法 From a inner join b on a.id = b.id 或 Update a set a.value = isnull(b.value,’’) From b where a.id = b.id 按ID更新成b表中的value值 删除a表中ID值在b表中存在的记录 不可关联表删除 可关联表删除 Eg: Eg: Delete a where exists (select b.id Delate a from b where a.id = b.id ) From a Inner join b on a.id = b.id 动态SQL语句 1、 普通动态SQL语句 Begin Execute immediate ‘update tab1 set column1=5’; End; 用变量替换SQL语句 V_sql := ‘update tab1 set column1=5’ Execute immediate v_sql; 2、 带出参动态SQL语句 n_count number(10); v_sql varchar2(1000); v_sql :=’ select count(*) from tablename’; execute immediate v_sql into n_count; 3、 动态存储过程(带入、出参) Eg: v_sql := 'begin p_test (:v1,:v2,:v3); end;' execute immediate v_sql using in v_code,in v_name,out v_result ; 1、 普通动态SQL语句 exec('update tab1 set column1 = 5') 或 exec sp_executesql N'select * from tableName' -- 字符串前一定要加N 用变量替换SQL语句 Declare @sql Nvarchar(1000) Set @sql='select * from tableName' exec sp_executesql @sql 2、 带出参动态SQL语句 declare @count int declare @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@count output 3、 动态存储过程(带入、出参) Eg: DECLARE @result VARCHAR(50); DECLARE @sql NVARCHAR(1000); DECLARE @para NVARCHAR(200); SET @sql = 'p_test @code,@name,@result output' SET @para = '@code varchar(10),@name varchar(10),@result varchar(50) output' EXEC sp_executesql 注:p_test为存储过程名 @sql,@para,'001','',@result OUTPUT 注:p_test 为存储过程名 张三TOP用法 1、在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 1、SQLServer中采购top方式获取结果集排在前面的部分记录 Eg:返回结果集中前10条记录 Select top 10 * from sysc01 2、sqlserver可通过ROW_NUMBER()排名函数实现 Eg: 获取按code排名第10到20行 SELECT a.* FROM (SELECT a.*,ROW_NUMBER() OVER( ORDER BY a.code ) AS nrow FROM tab01 a) a where nrow between 10 and 20 IF… Else 流控制 IF 条件表达式 then {语句块} Else {语句块} End if ; 1、 表达式 Case 表达式 when 匹配表达式 then 结果表达式1 else 结果表达式2 end Eg: Select case name when ‘张三’ then 1 when ‘李四’ then 2 else 0 end From person 或 Case when 条件表达式 then 结果表达式1 else 结果表达式2 end Eg: Select case when name=‘张三’ then 1 when name=‘李四’ then 2 else 0 end From person 2、 流控制语句 流控制与表达式结构很相似,只是IF 条件表达式 {语句块} Else {语句块} End 如果语句块中有多于1条SQL语句,则必须要使用begin … end 构造 1、 case表达式 同Oracle 2、不支持流控制 Case 用法

oracle与sqlserver差异,Oracle与SQLServer的SQL语法差异总结相关推荐

  1. pl/sql:oracle13(跟着宝哥学java:oracle系列:全网最全):pl/sql语法、pl/sql流程控制

    /* PL/SQL过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的数据库编程语言PL提供流程控制的语句SQL提供访问数据库的语句PL/SQL是对sql的扩展 使其 ...

  2. [转]SQLServer和Oracle,存储过程区别,常用函数对比

    本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html 以前一直用sqlserver,只有很少的一点oracle的经验,现在要 ...

  3. Sybase和mysql语法_主流数据库复制表结构(SqlServer/Mysql/Oracle/Sybase)[语法差异分析]...

    因为数据库SQL语句在各大产品中带有"方言性",即SQLSERVER SYBASE都是用了T-SQL,Mysql是用的标准SQL,Oracle有有自己的PL/SQL.由于这种&qu ...

  4. Mysql,SqlServer,Oracle主键自动增长的设置

    Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...

  5. oracle判断值是否为0的高数,SQLServer和Oracle的常用函数对比

    数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) ...

  6. 如何将oracle数据库中的表结构导入到sqlserver中,Oracle转换成SqlServer数据库的步骤...

    1 背景 ITM系统目前支持MysqL.Oracle数据库,由于现在需要和CA产品进行结合,用CA产品的采集功能进行数据采集,因此需要使用CA产品的sqlServer数据库,为了使得系统支持sqlse ...

  7. sqlserver往oracle写数据,Sqlserver连接oracle进行读写数据库

    项目中用到sqlserver去连接oracle,通过sqlserver可以直接操作oracle. 1.安装oracle客户端软件,并配置: 1)打开Net Manager,新增服务名: 2)选择网络协 ...

  8. 关于sqlserver和oracle的一点感受

    2012年使用了一点oracle,那个时候其实并不真正的了解这个数据库,所会的也就是利用toad做一些简单的管理,后来转战到sqlserver才开始对数据库这个东西有了一些了解.使用了sqlserve ...

  9. 如何将sql数据导入到oracle数据库,将SQLServer的数据导入到Oracle数据库的方法-Oracle...

    1.首先在SQL Server的电脑上安装Oracle,或者是操作的电脑上安装Oracle,如果没有,导出时会提示失败 2.打开SQL Server,右键点击要导出的数据库,选择"任务&qu ...

最新文章

  1. (转)MySQL联表查询
  2. ASP.NET缓存 Cache之数据缓存
  3. 数据科学工具 Jupyter Notebook 教程(二)
  4. 关于.h .cpp和inline的讨论
  5. HDU 1063 Exponentiation
  6. PowerDesigner物理数据模型
  7. poj 2255 Tree Recovery 解题报告
  8. linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法
  9. atxserver运行没有反应_连续生物工艺:灌流生物反应器
  10. 02数据库表的相关操作
  11. centos安装词典——图形界面的和命令行
  12. 美国在线计算机硕士申请难度,美国计算机硕士申请条件有哪些?看完这篇文章你就清楚了...
  13. python 运行时 变量_在运行时在python中检索变量的名称?
  14. 机器学习概念篇:监督学习、过拟合,正则化,泛化能力等概念以及防止过拟合方法总结
  15. 通过 Nginx 来实现禁止国外IP访问网站
  16. Windows 10 上使用 CMake GUI 编译 Krita 源代码并使用 MinGW 64 作为构建工具
  17. u盘装服务器系统失败原因,u盘装系统引导失败原因及解决方案
  18. matlab在量子力学中的应用,一个关于量子力学中的matlab的问题
  19. 国密算法TF32A09硬件加密芯片
  20. 查看 android 设备号,获取Android设备的唯一识别码|设备号|序号|UUID

热门文章

  1. PYPL 12月榜单发布,编程语言、IDE与数据库市场如何?
  2. ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
  3. 梁迪:我为MVP骄傲,《微软最有价值专家奖励计划介绍》附专题视频
  4. try.dot.net 的正确使用姿势
  5. Net Core集成Exceptionless分布式日志功能以及全局异常过滤
  6. .NET Core 2.1 Preview 1发布:更快的构建性能
  7. ASP.NET Core之跨平台的实时性能监控(2.健康检查)
  8. .NET开源MSSQL、Redis监控产品Opserver之Redis配置
  9. Dapper源码学习和源码修改(下篇)
  10. .NET应用迁移到.NET Core(三)从商业角度看移植过程