资源描述:
《Oracle和SQLServer的语法区别.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle和SQLServer的语法区别SQL语言支持这一部分概述了Transact-SQL和PL/SQL语言语法之间的相同点和不同点,并给出转换策略。要将OracleDML语句和PL/SQL程序迁移到SQLServer时,请按下列步骤执行:1.验证所有SELECT、INSERT、UPDATE和DELETE语句的语法是有效的。进行任何必要的修改。2.把所有外部联接改为SQL-92标准外部联接语法。3.用相应SQLServer函数替代Oracle函数。4.检查所有的比较运算符。5.用“+”字符串串联运
2、算符代替“
3、
4、”字符串串联运算符。6.用Transact-SQL程序代替PL/SQL程序。7.把所有PL/SQL游标改为非游标SELECT语句或Transact-SQL游标。8.用Transact-SQL过程代替PL/SQL过程、函数和包。9.把PL/SQL触发器转换为Transact-SQL触发器。10.使用SETSHOWPLAN语句,优化查询性能。SELECT语句Oracle和MicrosoftSQLServer使用的SELECT语句语法类似。OracleMicrosoftSQLServerSEL
5、ECT[/*+optimizer_hints*/][ALL
6、DISTINCT]select_list[FROM{table_name
7、view_name
8、select_statement}][WHEREclause][GROUPBYgroup_by_expression][HAVINGsearch_condition][STARTWITHUCONNECTBY][{UNION
9、UNIONALL
10、INTERSECT
11、MINUS}SELECTU][ORDERBYclause][FORUPDATE]SELEC
12、Tselect_list[INTOnew_table_]FROMtable_source[WHEREsearch_condition][GROUPBY[ALL]group_by_expression[,Un][WITH{CUBE
13、ROLLUP}][HAVINGsearch_condition][ORDERBYorder_expression[ASC
14、DESC]]Inaddition:UNIONOperatorCOMPUTEClauseFORBROWSEClauseOPTIONClauseSQLServ
15、er不支持Oracle特定的基于开销的优化程序提示,它必须被删除。建议使用的技术是,使用SQLServer基于开销的优化程序。有关详细信息,请参见本章后面的“SQL语句优化”。SQLServer不支持Oracle的STARTWITHUCONNECTBY子句。在SQLServer中,可以创建完成相同任务的存储过程替代它。SQLServer不支持Oracle的INTERSECT和MINUS集合运算符。可使用SQLServerEXISTS和NOTEXISTS子句,实现相同的结果。在下面示例中,使用INTER
16、SECT运算符,用于查找学生登记的所有课程的代码和名称。注意,EXISTS运算符是如何代替INTERSECT运算符的。返回的数据是相同的。OracleMicrosoftSQLServerSELECTCCODE,CNAMEFROMDEPT_ADMIN.CLASSINTERSECTSELECTC.CCODE,C.CNAMEFROMSTUDENT_ADMIN.GRADEG,DEPT_ADMIN.CLASSCWHEREC.CCODE=G.CCODESELECTCCODE,CNAMEFROMDEPT_ADMIN
17、.CLASSCWHEREEXISTS(SELECT'X'FROMSTUDENT_ADMIN.GRADEGWHEREC.CCODE=G.CCODE)在此例中,使用MINUS运算符,查找那些没有任何学生登记的课程。OracleMicrosoftSQLServerSELECTCCODE,CNAMEFROMDEPT_ADMIN.CLASSMINUSSELECTC.CCODE,C.CNAMEFROMSTUDENT_ADMIN.GRADEG,DEPT_ADMIN.CLASSCWHEREC.CCODE=G.CCOD
18、ESELECTCCODE,CNAMEFROMDEPT_ADMIN.CLASSCWHERENOTEXISTS(SELECT'X'FROMSTUDENT_ADMIN.GRADEGWHEREC.CCODE=G.CCODE)INSERT语句Oracle和MicrosoftSQLServer使用的INSERT语句语法类似。OracleMicrosoftSQLServerINSERTINTO{table_name
19、view_name
20、select_statement