- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本章主要内容 1. 游标 2.动态SQL 3.存储过程 4.触发器 SQL的宿主使用 SQL不仅可以作为独立的数据语言直接以交互的方式使用;SQL还可以作为子语言嵌入在宿主语言中使用,这里所说的宿主语言就是指我们常见的高级程序设计语言,如C语言等。 把SQL嵌入到宿主语言中使用必须要解决以下三个方面的问题: 嵌入识别问题:宿主语言的编译程序不能识别SQL语句,所以首要的问题就是要解决如何区分宿主语言的语句和SQL语句; 宿主语言与SQL语言的数据交互问题:SQL语句的查询结果必须能够交给宿主语言处理,宿主语言的数据也要能够交给SQL语句使用; 宿主语言的单记录与SQL的多记录的问题:宿主语言一般一次处理一条记录,而SQL常常处理的是记录(元组)的集合,这个矛盾必须解决。 如何解决嵌入识别问题? 为了区分主语言和SQL语句,为SQL语句加一个识别前缀,常用前缀格式是: EXEC SQL 比如: EXEC SQL INSERT INTO 职工 VALUES(WH8,E20,1560) 计算机的编译系统如何识别这些前缀? 预编译技术 在编译之前首先将SQL语句转换为主语言的合法函数调用或合法语句,这个过程称为预编译。 嵌入了SQL的应用程序的执行过程 INCLUDE SQLCA 如:sqlca.sqlcode 什么是主变量? 主变量的说明格式 BEGIN DECLARE SECTION … 主变量说明 … END DECLARE SECTION 主变量说明的例: EXEC SQL BEGIN DECLARE SECTION ; char whnumb[5] char city[12] int wh_area EXEC SQL END DECLARE SECTION; 使用主变量的例子: UPDATE 仓库 SET 面积 = :wh_area WHERE 仓库号 = :whnumb ; Cursor DECLARE CURSOR OPEN FETCH CLOSE DEALLOCATE DECLARE CURSOR语句的格式是: DECLARE 游标名 [INSENSITIVE] [SCROLL] CURSOR FOR SELECT-查询块 [FOR {READ ONLY|UPDATE [OF 〈列名〉[,〈列名〉…]]}] OPEN语句的格式是: OPEN 游标名 从游标中读记录 FETCH [[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ] 游标名 [INTO :主变量1,:主变量2 …] 关闭游标 CLOSE 游标名 释放游标 DEALLOCATE 游标名 该命令的功能是删除由DECLARE说明的游标。该命令不同于CLOSE命令,CLOSE命令只是关闭游标,需要时还可以重新打开;而DEALLOCATE命令则要释放和删除与游标有关的所有数据结构和定义。 理解游标 与程序设计语言中的文件相对照: DECLARE CURSOR相当于说明了一个文件; OPEN相当于打开文件; FETCH相当于读一条记录; CLOSE相当于关闭文件; DEALLOCATE语句相当于删除文件。 使用游标的一个C语言程序段 … EXEC SQL BEGIN DECLARE SECTION char whnumb[5] char city[12] int wh_area EXEC SQL END DECLARE SECTION … EXEC SQL DECLARE c1 CURSOR FOR SELECT 仓库号,城市,面积 FROM 仓库 WHERE 面积 = :wh_area EXEC SQL OPEN c1 while ( SQLCA.sqlcode 100 ) { EXEC SQL FETCH c1 INTO :whnumb,:city,:wh_area … } EXEC SQL CLOSE c1 … 利用游标进行删除和更新操作 在T-SQL中,CURSOR不仅仅可以用来浏览查询结果,还可以用UPDATE语句修改CURSOR对应的当前行或用DELETE命令删除对应的当前行。 使用游标的UPDATE命令 UPDATE 表名 SET 列名={表达式|NULL} [,列名={表达式|NULL}…] WHERE CURRENT OF 游标名 使用游标的DELETE命令 DELETE FROM 表名 WHERE CURRENT OF 游标名 2.动态SQL 动态SQL语句的划分 动态定义功能 动态操作功能 动态查询功
文档评论(0)