oracle与sqlserver差异,Oracle与SQLServer的SQL语法差异总结

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 用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

话里话外:装备制造业企业迫切需要实现信息化综合集成

博主推荐延展咨询资深顾问 沈靓文章 装备制造企业产品具有单件产值大、技术含量高、生产周期长、完全个性化生产的特点&#xff0c;伴随着制造业整体水平的提高&#xff0c;近几年又兴起了异地制造、移动工厂等模式&#xff0c;而装备制造业现有的管理方式和信息化水平多不能适…

日本艺伎的拍照姿势,竟源于孔子?看完真的涨知识···

全世界只有3.14 % 的人关注了爆炸吧知识本文授权转载自公众号&#xff1a;艺非凡&#xff08;ID&#xff1a;efifan&#xff09;相信很多人都见过下面这个emoji表情&#xff1a;????????????没错&#xff0c;在风靡全球20余年的美剧《老友记》中&#xff0c;Ross决…

关于castle和Could not find the dialect in the configuration错误

最近试了试castle&#xff0c;NND&#xff0c;老是报“Could not find the dialect in the configuration”&#xff0c;明明配的没问题&#xff0c;上网搜索所有教程都是这么配的。后来在一国外的网站解决NHibernate的问题的帖子&#xff0c;看的一哥们说把hibernate去了试试&…

程序员如何把控自己的职业

这篇文章的主要内容主要是我今年3月份在腾讯做的直播&#xff0c;主要是想让一些技术人员对世界有一个大体的认识&#xff0c;并且在这个认识下能够有一个好的方法成就自己。而不是在一脸蒙圈的状态下随波逐流&#xff0c;而日益迷茫和焦虑。直播完后&#xff0c;腾讯方面把我的…

oracle中触发器只能用于表吗,Oracle触发器的分类和使用

Oracle触发器的分类和使用摘要&#xff1a;在Oracle中&#xff0c;触发器是一种特殊的存储过程&#xff0c;它在发生某种数据库事件时由Oracle 系统自动触发。触发器通常用于加强数据的完整性约束和业务规则等&#xff0c;对于表来说&#xff0c;触发器可以实现比CHECK约束更为…

Android之倍数提高工作效率的 Android Studio 奇技

关于快捷键 The File Structure Popup ctrlf12 此快捷键可以调出当前文件的大纲&#xff0c;并通过模糊匹配快速跳转至指定的方法。 勾选上“show anonymous classes”后其功能相当于Eclipse中的ctrlo The Call Hierarchy Popup ctrlalth 查看某个方法的调用路径。 Quick De…

Spring学习笔记十二---泛型依赖注入

为什么80%的码农都做不了架构师&#xff1f;>>> package generic_di;import org.springframework.stereotype.Repository;Repository public class BaseRepository<T> {public void save() {System.out.println("Repository save ...");} }package…

STM32的同步规则模式使用

由于要采集电压、电流以计算功率、阻抗等信息&#xff0c;STM32的同步规则模式很适合于这种情景。使用时有几点需要注意的&#xff1a; 1、选择正确的模式&#xff1a;ADC_Mode_RegSimult&#xff0c;即DUALMOD[3:0] 0110&#xff0c;ADC2在双模式中&#xff0c;这些位为保留位…

女孩子狠起来可以多可怕?

1 让我康康是什么好吃的&#xff1f;▼2 抢答&#xff1a;他们到底能不能走出去&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 小朋友的眼睛是雪亮的&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 这该死的魅力▼5 我脚伤了&#xff0…

字符串之字符数组种是否所有的字符都只出现过一次

字符串之字符数组种是否所有的字符都只出现过一次 例子&#xff1a;chas[a,b,c],return true,chas[1,2,1],return false解题思路&#xff1a;定义boolean数组&#xff0c;默认是false,给每个字符转化成的整形数字作为boolean数组的下标&#xff0c;然后设置为true,如果下次出现…

开源的.NET定时任务组件Hangfire开发总结

定时任务调度问题&#xff0c;是一个老生常谈的问题。网上有许多定时任务调度的解决方案&#xff0c;以前主要是使用Window计划和Window服务来做任务定时执行&#xff0c;然后就开始使用定时任务调度框架Quartz.Net。Hangfire这个自带后台任务调度面板&#xff0c;可以在后台手…

oracle中表截断是什么意思,Oracle截断表

Oracle TRUNCATE TABLE在Oracle中&#xff0c;TRUNCATE TABLE语句用于从表中删除所有记录。它的作用与DELETE语句相同&#xff0c;但不指定WHERE子句。通常在不需要担心回滚的情况下使用一旦表被截断&#xff0c;就无法回滚。 TRUNCATE TABLE语句不影响表的任何索引&#xff0c…

jquery mobile页面切换效果(Flip toggle switch)(注:jQuery移动使用的数据属性的列表。 )...

1.页面切换&#xff08;data-transition&#xff09; 地址&#xff1a;http://api.jquerymobile.com/data-attribute/ data-transition fade | flip | flow | pop | slide | slidedown | slidefade | slideup | turn | none 褪色 | |翻转||流流行幻灯片| | | slidedown | s…

Android之如何解决android.os.NetworkOnMainThreadException的异常

android.os.NetworkOnMainThreadException 首先从字面的意思理解为网络工作在主线程的异常,也就是说网络请求不能在主线程里面 android4.0以后不能在主线程发起网络请求,该异步网络请求。 就针对此问题有两种解决的方法: 1.可以再Activity的onCreate()方法中加入这样一…

C# Socket编程笔记(转)

C# Socket编程笔记 http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html TCP Socket:Server 端连接步骤:new socket() -> bind() -> listen() -> accept() ->recv()/send() -> sockets.close() Client 端连接步骤:new socket() -> connect ->…

学习 wxpython_序

序-wxpython 学习 一直对python 比较感兴趣&#xff0c;今天终于下定决心潜心研究wxpython。从今天开始&#xff0c;将开始我的wxpython之路&#xff0c;希望通道的一起研究。 wxpython 是python的 GUI 框架之一&#xff0c;由于免费而且资料比较丰富&#xff0c;所以我选择用w…

oracle asm磁盘头 备份,ASM磁盘头的第三个备份-Physically Addressed Metadata Redundancy

这几天很蕉绿&#xff0c;想着复习下技术。个人很喜欢ASM&#xff0c;就从ASM开始复习。循环kfed发现一个很奇怪的事情&#xff0c;就是&#xff0c;我扫到AU 11的时候发现&#xff0c;居然这个aun的blkn0是KFBTYP_DISKHEAD。要知道以前看到KFBTYP_DISKHEAD就是第二个AU的倒数第…

头上有多少根头发算秃头?

全世界只有3.14 % 的人关注了爆炸吧知识灵魂拷问你秃头了吗&#xff1f;超模君表妹秃不秃头一直都是模友关心的问题&#xff01;我想是时候讲讲秃头这个问题了&#xff01;阿里数据显示&#xff0c;在阿里零售平台买植发、护发东西的人中&#xff0c;80后占了38.5%&#xff0c;…

VS Code集成SandDance可视化分析数据

什么是SandDanceSandDance是微软研究院推出的数据可视化工具。SandDance通过触控式的界面&#xff0c;实现使用者和3D信息图表进行互动&#xff0c;更加特别的是可以以不同的角度不同的方式呈现分析结果&#xff0c;使用户可以通过可视化的方式更加直观的接受数据信息。基于易于…

使用T-SQL找出执行时间过长的作业

有些时候&#xff0c;有些作业遇到问题执行时间过长&#xff0c;因此我写了一个脚本可以根据历史记录&#xff0c;找出执行时间过长的作业&#xff0c;在监控中就可以及时发现这些作业并尽早解决&#xff0c;代码如下&#xff1a; SELECT sj.name , sja.start_execution_date,D…