Oracle和SQLServer的语法区别(5)
VDEGREE_PROGRAM CHAR(1); @VDEGREE_PROGRAM CHAR(1), VDEGREE_PROGRAM_NAME @VDEGREE_PROGRAM_NAME VARCHAR2(20); VARCHAR(20) BEGIN SELECT @VDEGREE_PROGRAM = 'U' VDEGREE_PROGRAM := 'U'; SELECT @VDEGREE_PROGRAM_ IF VDEGREE_PROGRAM = 'U' THEN NAME = CASE @VDEGREE_PROGRAM VDEGREE_PROGRAM_NAME := WHEN 'U' THEN 'Undergraduate' 'Undergraduate'; WHEN 'M' THEN 'Masters' ELSIF VDEGREE_PROGRAM = 'M' WHEN 'P' THEN 'PhD'. THEN VDEGREE_PROGRAM_ ELSE 'Unknown' NAME := 'Masters'; END ELSIF VDEGREE_PROGRAM = 'P' THEN VDEGREE_PROGRAM_ NAME := 'PhD'; ELSE VDEGREE_PROGRAM_ NAME := 'Unknown'; END IF; END; 重复的语句执行(循环)
Oracle PL/SQL 提供了无条件的 LOOP 和 FOR LOOP。而 Transact-SQL 则提供了 WHILE 循环和 GOTO 语句,来达到循环的目的。 WHILE Boolean_expression
{sql_statement | statement_block} [BREAK] [CONTINUE]
对于一个或多个语句的重复执行,WHILE 循环测试一个布尔表达式。只要给定的表达式求值为 TRUE,语句就会重复执行。如果要执行多个语句,它们必须放在一个 BEGINUEND 块中。
Oracle DECLARE COUNTER NUMBER; BEGIN COUNTER := 0 WHILE (COUNTER <5) LOOP COUNTER := COUNTER + 1; END LOOP; END; Microsoft SQL Server DECLARE @COUNTER NUMERIC SELECT@COUNTER = 1 WHILE (@COUNTER <5) BEGIN SELECT @COUNTER = @COUNTER +1 END 可以使用 BREAK 和 CONTINUE 关键字,从循环的内部控制语句的执行。BREAK 关键字导致从 WHILE 循环中无条件退出,CONTINUE 关键字使 WHILE 循环跳过后面的语句,并重新开始循环。BREAK 关键字和 Oracle PL/SQL EXIT 关键字等同。Oracle 没有 CONTINUE 的对等关键字。
GOTO 语句
Oracle 和 Microsoft SQL Server 均有 GOTO 语句,但是语法不同。遇到 GOTO 语句,Transact-SQL 批处理执行就会跳到标号处。GOTO 语句和标号之间的语句不执行。
Oracle GOTO label; <
Transact-SQL PRINT 语句和 PL/SQL RDBMS_OUTPUT.put_line 过程所执行的操作相同。它用于打印用户指定的消息。
PRINT 语句的消息限度为 8,000 个字符。使用 char 或 varchar 数据类型定义的变量可以嵌入打印语句中。如果使用了任何其它数据类型,必须使用 CONVERT 或 CAST 函数。可以打印局部变量、全局变量和文本。可用单引号和双引号将文本括上。
从存储过程返回
Microsoft SQL Server 和 Oracle 均有 RETURN 语句。使用 RETURN 语句,程序可从查询或过程无条件退出。RETURN 是一条可立即执行的完整语句,并可在任何时候用于从过程、批处理或语句块中退出。RETURN 后面的语句均不执行。
Oracle RETURN expression: Microsoft SQL Server RETURN [integer_expression] 提出程序错误
Transact-SQL RAISERROR 语句返回一个用户定义的错误信息,并设定一个系统标志,来记录已发生了一个错误。它和 PL/SQL raise_application_error 异常错误处理程序的功能相似。 RAISERROR 语句允许客户从 sysmessages 表检索一个条目,或使用用户定义的严重性和状态信息动态地创建一条消息。定义后,此消息作为服务器错误信息返回给客户。
RAISERROR ({msg_id | msg_str}, severity, state [, argument1 [, argument2]]) [WITH options]
转换 PL/SQL 程序时,可能不需要使用 RAISERROR 语句。在下面的代码示例中,PL/SQL 程序使用 raise_application_error 异常错误处理程序,而 Transact-SQL 程序什么也不使用。加入 raise_application_error 异常错误处理程序,可避免 PL/SQL 程序返回二义性的 unhandled exception 错误信息。相反,当发生意外问题时,它总是返回 Oracle 错误信息 (SQLERRM)。
当 Transact-SQL 程序失败时,它总是给客户程序返回详细的错误信息。因此,除非需要进行专门错误处理,否则,并不总是需要 RAISERROR 语句。
Oracle CREATE OR REPLACE FUNCTION DEPT_ADMIN.DELETE_DEPT (VDEPT IN VARCHAR2) RETURN NUMBER AS BEGIN DELETE FROM DEPT_ADMIN.DEPT WHERE DEPT = VDEPT; RETURN(SQL%ROWCOUNT); EXCEPTION WHEN OTHER THEN RAISE_APPLICATION_ERROR (-20001,SQLERRM); END DELETE_DEPT; / Microsoft SQL Server CREATE PROCEDURE DEPT_ADMIN.DELETE_DEPT @VDEPT VARCHAR(4) AS DELETE FROM DEPT_DB.DBO.DEPT WHERE DEPT = @VDEPT RETURN @@ROWCOUNT GO 游标的实现
不管从数据库中请求行数的多少,Oracle 始终要求游标和 SELECT 语句一起使用。在 Microsoft SQL Server 中,未包含在游标内的 SELECT 语句把行作为默认结果集,返回给客户。这是一种将数据返回给客户程序的有效方法。
SQL Server 给游标函数提供了两个接口。当在 Transact-SQL 批处理或存储过程时使用游标时,SQL 语句可用来声明、打开游标和从游标以及定位更新和删除中提取。当使用来自 DB-Library、ODBC 或 OLE DB 的游标时,SQL Server 客户机库透明地调用内置的服务器函数,以更有效地处理游标。
当从 Oracle 导入 PL/SQL 过程时,首先确定游标是否需要执行和 Transact-SQL 中相同的功能。如果游标只给客户程序返回一组行,则使用 Transact-SQL 中无游标的 SELECT 语句,返回一个默认的结果集。如果使用游标向局部过程变量每次加载一行数据,则必须使用 Transact-SQL 中的游标。
下表给出了游标的使用语法。
操作 Microsoft SQL Server DECLARE cursor_name CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | KEYSET | CURSOR cursor_name DYNAMIC | 声明游标 [(cursor_parameter(s))] FAST_FORWARD] IS select_statement; [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] [TYPE_WARNING] FOR select_statement [FOR UPDATE [OF column_name [,Un]]] OPEN cursor_name 打开游标 OPEN cursor_name [(cursor_parameter(s))]; FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE {n | @nvar} FETCH cursor_name INTO 从游标中提取 | RELATIVE {n | variable(s) @nvar}] FROM] cursor_name [INTO @variable(s)] UPDATE table_name UPDATE table_name SET statement(s)U SET statement(s)U 更新提取的行 WHERE CURRENT OF WHERE CURRENT OF cursor_name; cursor_name DELETE FROM DELETE FROM table_name table_name 删除提取的行 WHERE CURRENT OF WHERE CURRENT OF cursor_name; cursor_name 关闭游标 CLOSE cursor_name; CLOSE cursor_name DEALLOCATE 删除游标数据结构 暂缺 cursor_name 尽管 Transact-SQL DECLARE CURSOR 语句不支持使用游标参数,但它的确支持局部变量。当游标打开时,这些局部变量的值可在游标中使用。Microsoft SQL Server 在其 DECLARE CURSOR 语句中提供了许多额外的功能。
Oracle INSENSITIVE 选项用于定义游标,使之创建一个要使用的数据的临时副本。对游标的所有请求均由此临时表应答。因此,对基表的修改不会反映在对该游标提取所返回的数据中。这种类型游标访问的数据不能被修改。
应用程序可以请求一种游标类型,然后执行一条不被所请求类型服务器游标支持的
Transact-SQL …… 此处隐藏:3588字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




