该【Oracle与SQLServer的SQL语法差异总结 】是由【国霞穿越】上传分享,文档一共【7】页,该文档可以免费在线阅读,需要了解更多关于【Oracle与SQLServer的SQL语法差异总结 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。Oracle与SQLServer应用差异对比分析
项目
Oracle10g
SQLServer2008
备注
过储存
程格式
PROCEDUREORREPLACECREATE)
IS参数列表存储过程名(Begin
——存储过程内容;End存储过程名
程名PROCEDURE存储过CREATE)AS参数列表(存储过程内容--
存储过程参数
指定参数类型,但不指定长度、1在参数及类型间要加入出标识2、
OUT)、(INEg:VARCHAR2IN
taskremark
NUMBERprmcodeOUT
1、指定参数类型,并要指定长度后面加要2、对于出参需在类型
OUTPUT(或OUT)Eg:***@taskremark
VARCHAR(10)***@prmcodeintoutput
使用存储过程
1、直接使用存储过程名2、参数在存储过程后面的括号包内列出
Eg:pwfmgetcolumns(vtablename,vtablecolumn);
要加刖面需调用存储过程名1、exec关键字2、参数在存储过程后面逐个列出
3、出参后面要加关键字output或out
Eg:******@tablename,***@tablecolumnOUTPUT
义自定格数函式
CREATEORREPLACEFUNCTION参数列表)函数名(RETURN返回值类型ISBEGIN;END
参数(函数名FUNCTIONCREATE)
列表AS返回值类型RETURNs函数内容一
自定义函数内容
指定参数类型,但不指定长度1、
2、在参数及类型间要加入出标识
OUT)、(INEg:taskremark
INVARCHAR2
NUMBEROUTprmcode3、支持
对数据增、删、改操作语句4、支持动态SQL
指定参数类型,并要指定长度、1不支持出参2、
Eg:VARCHAR(10)***@taskremark
3、不支持对数据增、删、改操作
4、不支持动态SQL语句
自使用函定义数
1、直接使用函数名Eg:
Vresult:=fwfmisandbegin(flowid,stepid)
、1Eg:Set
***@result=
(***@flowid,
***@stepid)
游标
1、游标声明isDECLAREcursor
游标名语句select
游标声明1、forcursor名游
DECLARE标语句select
读书破万卷下笔如有神
2、使用游标过程打开(open)-〉提取(fetch)-〉关闭(close)支持快捷使用游标,直接使用3、
循环,数据库会自动打开、for提取及关闭游标
2、使用游标过程打开(open)-〉提取(fetch)-〉关闭(close)->销毁(
变量
1、变量前不可加@符号变量声明不需要程2、存储过中declareEg:);
Codevarchar2(53、变量类型可按表中字段类型动态定义Eg:
%type;V_id
@符号1、变量刖需要加关键变量声
明需要使用Declare2、字Eg:;
varchar(5)******@code3、不支持按表字段类型动态定义
赋值
表达式;:=1、变量直接赋值,变量
Eg:v_result:='abed';2、通过SQL语句Select表达式into变量from表
Eg:Selectcode,nameintov_code,v_namefromsysc01Whereid=1000
;表达式Set变量=1、变量直接赋值,
Eg:******@result='abcd'2、通过SQL语句赋值Select变量=表达式from表
Eg:******@code=code,***@name=namefromsysc01whereid=1000
语句结
束符
;作为语句的结SQL语句使用分号束
作为结束符语句不需要加分号;SQL(加也可)
大小写
对字符区分大小写Oracle
也可修改默认对字符不区分大小写,数据库配置支持区分大小写
序列
、有序列sequence对象,无自动1增长列
无序列对象,表中有自动增长列1、
Select
语法
1、结果集可做为表使用,使用时可不加别名Eg:Select*from(select*fromtabl)2、虚表dual的使用,对于select计算某些与实体表无关的表达式时,要使用虚表dualEg:Selectround(1/3,2)fromdual;、3
结果集可做为表使用,使用时必1、须加别名Eg:Select*from(select*fromtabl)a2、对于Select计算某些与实体表无关的表达式时,可使用不带from的select语句Eg:Selectround(1/3,2);
3、
Update
语法
不可关联表更新Eg:Forcurin
(,
可关联表更新Eg:)
''=isnull(,.
将a表中value
读书破万卷下笔如有神
=)loop
==;Endloop;或
=(
=)
=
'')=
isnull(,=
按ID更新成b表中的value值
Delete
语法
不可关联表删除Eg:Deleteawhereexists(=)
可关联表删除Eg:DelateaFroma
=
删除alD表中b值在中表在存记的录
动态语
SQL句
普通动态SQL语句1、BeginsetupdateExecuteimmediate'tablcolumn1=5';End;SQL用变量替换语句V_sql:='updatetab1setcolumn1=5'
Executeimmediatev_sql;语句、2
带出参动态SQLn_countnumber(10);v_sqlvarchar2(1000);fromselectv_sql:='count(*);'tablenameexecuteimmediatev_sqlinton_count;
动态存储过程(带入、出参)3、Eg:'beginptestvsql:=(:v1,:v2,:v3);end;'executevsqlimmediateininusingvcode,vresult;
outv_name,注:为存储过程名ptest
1、普通动态SQL语句exec('updatetablsetcolumnl=5')或execsp_executesqlN'select*fromtableName'--字符串前一定要加N用变量替换SQL语句
******@sqlNvarchar(IOOO)******@sql='select*fromtableName'execsp_******@sql
2、带出参动态SQL语句******@******@sqlsnvarchar(4OOO)******@sqls='******@a=count(*)fromtableName'execsp_******@sqls,N'***@aintoutput',***@countoutput3、动态存储过程(带入、出参)
Eg:******@resultVARCHAR(50;******@sqlNVARCHAR(1000);******@paraNVARCHAR(200);******@sql='ptest
***@code,***@name,***@resultoutput'******@para='***@codevarchar(10),***@namevarchar(10),***@result
varchar(50)output'
spexecutesqlEXEC.
读书破万卷下笔如有神
***@sql,***@para,'001','张三******@result',为存储过程名p_test注:
TOP用
法
中米用伪列rownum获1、在Oracle取结果集中排在前面的部分记录Eg:返回结果集中刖10条记录Select*fromsysc01whererownum<=10符号,不可使、<=Rownum可使用<=1号只可〉、>=符号,如果使用=用列还常用于形成结果集Rownum2、的顺序号,从而可获取一定序号范围的行排名第Eg:获取按code10到20行asa.*,rownum(SelectSelect*fromcode)orderbyfromnrowtabOlawherenrowbetween10and20
方式获取结中米购top1、SQLServer果集排在刖面的部分记录10条记录Eg:返回结果集中刖top10*fromsysc01Select
可通过、sqlserver2()rownumber排名函数实现20行排名第10到Eg:获取按CodeSELECTFROM(a.*SELECTORDEROVER(a.*,ROWNUMBER())ASnrowFROMtab01a)awherenrowbetween10and
20
IF…
Else流
控制
IF条件表达式then}{语句块
Else语句块}{Endif;
IF条件表达式}{语句块Else}语句
块{End语句,SQL如果语句块中有多于1条构造…end则必须要使用begin
用Case
法
、1表达式配表达式匹Case表达式when结果表达1then结果表达式else2end式Eg:then1'张三Selectcasenamewhen'''when李四then2else0endFromperson或结果条件表达式whenthenCase2end1else结果表达式表达式Eg:thenSelect'张三name=casewhen
'0李四'name=1when'else2thenendFromperson流控制语句、2流控制与表达式结构很相似,只是
case表达式1、同
Oracle、不支持流控
制2
读书破万卷下笔如有神
结果表达式换成语句块
Case表达式when匹配表达式then{语句块1}else{语句块2}endcase;
Eg:
casev_name
when'张三'thenv_number:=1;
when'李四'thenv_number:=2;
else
v_number:=0endcase;
或
Casewhen条件表达式then{语句块
1}else{语句块2}endcase;
Eg:
case
whenv_name='张三'thenv_number:=1;
whenv_name='李四'thenv_number:=2;
else
v_number:=0
endcase;
临时表
1、临时表结构需要象实体表样脚本中使事先定义后再在SQL用,临时表名与实体表名规则一样Eg:tabletemporarycreateWFMW02
(paraidNUMBER(9),),
vvalueVARCHAR2(509NUMBER(),flowid
)9idNUMBER()
rowsdelete;commiton
临时表是在执行数据库脚本会话1、过程中创建并使用,临时表名前)
##全局临时表#号(或面带有Eg:
#WFMW02tablecreate(,
intparaid
),(50VARCHARvvalue
,flowidintintid)临时
表也可在使用过程中自动创建Selectparaid,vvalue,flowid,idinto#wfmw02
fromwfmb01c
常用函数
表达式1、nvl(表达式,)sysdate2、
instr(、3字符表达式1,字符表达式
),表达式isnull(1、表达式getdate()2、
3、字符1,字符表达式CHARINDEX(
读书破万卷下笔如有神
)2[,pos][,nth]从“表达式1”的“POS”位置搜索第“nth”个“表达式2”的位置(若未找到则返回0)4、
To_char(),to_date(),to_number()
2[,pos])表达式从“表达式2”的“搜”位置pos索“表达式1”并返回“表达式1”的起始位置(若未找到则返回0)
4、convert(),cast()
运算符
||字符相加AB=B||AEg:''''''
+
字符相加AB''+'B='''Eg:A
null
NULL空串等同于对于字符型数据,
null
不同于对于字符型数据,空串
Oracle与SQLServer的SQL语法差异总结 来自淘豆网m.daumloan.com转载请标明出处.