知识大全 Oracle 数据库向 MS SQL Server 7.0 的迁移(4)

Posted 语句

篇首语:农村四月闲人少,勤学苦攻把名扬。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle 数据库向 MS SQL Server 7.0 的迁移(4)相关的知识,希望对你有一定的参考价值。

Oracle 数据库向 MS SQL Server 7.0 的迁移(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  声明变量  Transact SQL 和 PL/SQL 变量是使用 DECLARE 关键字来创建的 Transact SQL 变量用 @ 来标识 并且像 PL/SQL 变量一样 第一次创建时该变量被初始化为空值       Transact SQL 不支持 %TYPE 和 %ROWTYPE 变量数据类型定义 在 DECLARE 命令中 不能对 Transact SQL 变量进行初始化 Oracle NOT NULL 和 CONSTANT 关键字不能用在 Microsoft SQL Server 数据类型定义中     与 Oracle LONG 和 LONG RAW 数据类型一样 text 和 image 数据类型不能用于变量声明 此外 不支持 PL/SQL 类型的记录和表定义     变量赋值  Oracle 和 Microsoft SQL Server 提供以下方法 给局部变量赋值       语句块  Oracle PL/SQL 和 Microsoft SQL Server Transact SQL 支持使用 BEGINUEND 术语 来指定程序块 Transact SQL 不要求在 DECLARE 语句后面使用语句块 在 Microsoft SQL Server 中 如果 IF 语句和 WHILE 循环执行不止一个语句 需要使用 BEGINUEND 语句块       条件处理  Microsoft SQL Server Transact SQL 条件语句包含 IF 和 ELSE 语句 而不是 Oracle PL/SQL 中的 ELSIF 语句 可以嵌套多个 IF 语句 来达到同样的效果 对于大量的条件测试 CASE 表达式更容易阅读       重复的语句执行(循环)  Oracle PL/SQL 提供了无条件的 LOOP 和 FOR LOOP 而 Transact SQL 则提供了 WHILE 循环和 GOTO 语句 来达到循环的目的     WHILE Boolean_expression  sql_statement | statement_block  [BREAK] [CONTINUE]      对于一个或多个语句的重复执行 WHILE 循环测试一个布尔表达式 只要给定的表达式求值为 TRUE 语句就会重复执行 如果要执行多个语句 它们必须放在一个 BEGINUEND 块中         可以使用 BREAK 和 CONTINUE 关键字 从循环的内部控制语句的执行 BREAK 关键字导致从 WHILE 循环中无条件退出 CONTINUE 关键字使 WHILE 循环跳过后面的语句 并重新开始循环 BREAK 关键字和 Oracle PL/SQL EXIT 关键字等同 Oracle 没有 CONTINUE 的对等关键字     GOTO 语句  Oracle 和 Microsoft SQL Server 均有 GOTO 语句 但是语法不同 遇到 GOTO 语句 Transact SQL 批处理执行就会跳到标号处 GOTO 语句和标号之间的语句不执行           PRINT 语句  Transact SQL PRINT 语句和 PL/SQL RDBMS_OUTPUT put_line 过程所执行的操作相同 它用于打印用户指定的消息     PRINT 语句的消息限度为 个字符 使用 char 或 varchar 数据类型定义的变量可以嵌入打印语句中 如果使用了任何其它数据类型 必须使用 CONVERT 或 CAST 函数 可以打印局部变量 全局变量和文本 可用单引号和双引号将文本括上     从存储过程返回  Microsoft SQL Server 和 Oracle 均有 RETURN 语句 使用 RETURN 语句 程序可从查询或过程无条件退出 RETURN 是一条可立即执行的完整语句 并可在任何时候用于从过程 批处理或语句块中退出 RETURN 后面的语句均不执行           提出程序错误  Transact SQL RAISERROR 语句返回一个用户定义的错误信息 并设定一个系统标志 来记录已发生了一个错误 它和 PL/SQL raise_application_error 异常错误处理程序的功能相似     RAISERROR 语句允许客户从 sysmessages 表检索一个条目 或使用用户定义的严重性和状态信息动态地创建一条消息 定义后 此消息作为服务器错误信息返回给客户     RAISERROR (msg_id | msg_str severity state  [ argument [ argument ]])  [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 始终要求游标和 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 中的游标     下表给出了游标的使用语法           尽管 Transact SQL DECLARE CURSOR 语句不支持使用游标参数 但它的确支持局部变量 当游标打开时 这些局部变量的值可在游标中使用 Microsoft SQL Server 在其 DECLARE CURSOR 语句中提供了许多额外的功能     INSENSITIVE 选项用于定义游标 使之创建一个要使用的数据的临时副本 对游标的所有请求均由此临时表应答 因此 对基表的修改不会反映在对该游标提取所返回的数据中 这种类型游标访问的数据不能被修改     应用程序可以请求一种游标类型 然后执行一条不被所请求类型服务器游标支持的 Transact SQL 语句 SQL Server 就会返回一个错误 指出游标类型已经更改 或者如给定了一组要素 SQL Server 就会隐式转换游标 有关使 SQL Server 隐式地将游标从一种类型转换到另一种类型的完整要素列表 请参见 SQL Server Books Online     除向前提取外 SCROLL 选项还允许向后 绝对和相对提取 滚动游标使用键集游标模型 在该模型中 任何用户对基表的已提交删除和更新都会反映在以后的提取中 仅当没有使用 INSENSITIVE 选项来声明该游标时 才成立     如果选定了 READ ONLY 选项 则禁止对游标中的任何行进行更新 该选项将改写对游标更新的默认功能     UPDATE [OF column_list] 语句用于定义游标中可更新的列 如果给出了 [OF column_list] 则只有列出的列允许修改 如果没有给出列表 所有的列均可更新 除非游标已定义为 READ ONLY     注意到 SQL Server 游标的名称作用域就是连接本身这一点 是很重要的 这和局部变量的名称作用域不同 在同一用户连接上 在第一个游标释放之前 不能声明与现有游标名称相同的第二个游标     与 PL/SQL 不同 在一个游标打开时 Transact SQL 不支持向该游标传递参数 当 Transact SQL 游标打开时 结果集成员身份和次序是固定的 对于其他用户已提交的对基表的更新和删除 均会反映在所有未使用 INSENSITIVE 选项定义的游标提取中 对于 INSENSITIVE 游标 还会生成一个临时表     Oracle 游标只能向前移动 不能向后或相对滚动 SQL Server 可以使用下表所示的提取选项 向前和向后滚动 只有当游标使用 SCROLL 选项声明时 这些提取选项才可以使用           Transact SQL FETCH 语句不需要 INTO 子句 如果没有指定返回变量 该行就会作为单行结果集 自动返回给客户 但是 如果过程必须给客户提供行 则使用无游标的 SELECT 语句 更为有效     在每个 FETCH 之后 @@FETCH_STATUS 函数均被更新 它和 PL/SQL 中使用的 CURSOR_NAME%FOUND 和 CURSOR_NAME%NOTFOUND 变量用法类似 每次成功提取后 @@FETCH_STATUS 函数值被设为 如果该提取要读取游标结尾之外的地方 则返回值 如果游标打开后 请求的行已被从表中删除 则 @@FETCH_STATUS 函数返回 通常 返回值 只在使用 SCROLL 选项声明的游标中出现 每次提取后 必须检查该变量 以保证数据的有效性     SQL Server 不支持 Oracle 的游标 FOR 循环语法     在 PL/SQL 和 Transact SQL 中 用于更新和删除的 CURRENT OF 子句语法和函数是相同的 定位 UPDATE 或 DELETE 用于对指定游标内的当前行进行更新和删除操作     Transact SQL CLOSE CURSOR 语句关闭游标 但数据结构仍可用于重新打开游标 PL/SQL CLOSE CURSOR 语句关闭并释放所有的数据结构     Transact SQL 需要使用 DEALLOCATE CURSOR 语句 删除游标数据结构 DEALLOCATE CURSOR 语句与 CLOS cha138/Article/program/Oracle/201311/18843

相关参考

知识大全 MS Access 数据库向 MS SQL Server 7.0 的迁移

MSAccess数据库向MSSQLServer7.0的迁移  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 使用 SQL*Loader 向 Oracle 导入数据

使用SQL*Loader向Oracle导入数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使

知识大全 MS Sql Server数据库分区

MSSqlServer数据库分区  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是数据库分区

知识大全 MS SQL Server 数据库语法

MSSQLServer数据库语法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据操作  SE

知识大全 MS SQL Server数据库事务锁机制分析

MSSQLServer数据库事务锁机制分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  锁是网

知识大全 MS SQL数据库SA权限入侵的感悟

MSSQL数据库SA权限入侵的感悟  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  想必大家都知道

知识大全 Access数据类型与MS SQL数据类型的相应

Access数据类型与MSSQL数据类型的相应  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  A

知识大全 如何恢复和修复MS SQL数据库的MDF文件[2]

如何恢复和修复MSSQL数据库的MDF文件[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 如何恢复和修复MS SQL数据库的MDF文件[1]

如何恢复和修复MSSQL数据库的MDF文件[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 MS SQL7.0的数据迁移到MySQL上的一种方法

MSSQL7.0的数据迁移到MySQL上的一种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!