《数据库编程基础》PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入了SQL的应用程序的执行过程
如何解决宿主语言和 SQL语言的数据交换问题?
设立数据通讯区、引入主变量的概念 INCLUDE SQLCA 如:sqlca.sqlcode 什么是主变量?
主变量的说明格式
BEGIN DECLARE SECTION … 主变量说明 …
END DECLARE SECTION
• 该命令的功能是删除由DECLARE说明的游标。该 命令不同于CLOSE命令,CLOSE命令只是关闭游 标,需要时还可以重新打开;而DEALLOCATE命 令则要释放和删除与游标有关的所有数据结构和 定义。
理解游标
与程序设计语言中的文件相对照:
– DECLARE CURSOR相当于说明了一个文件; – OPEN相当于打开文件; – FETCH相当于读一条记录; – CLOSE相当于关闭文件; – DEALLOCATE语句相当于删除文件。
• 嵌入识别问题:宿主语言的编译程序不能识别
SQL语句,所以首要的问题就是要解决如何区分 宿主语言的语句和SQL语句;
• 宿主语言与SQL语言的数据交互问题:SQL语
句的查询结果必须能够交给宿主语言处理,宿主 语言的数据也要能够交给SQL语句使用;
• 宿主语言的单记录与SQL的多记录的问题:
宿主语言一般一次处理一条记录,而SQL常常处 理的是记录(元组)的集合,这个矛盾必须解决 。
OPEN语句的格式是:
OPEN <游标名>
该语句的功能是打开或启动指出的游标,该游标名是用 DECLARE CURSOR语句已经定义好的。执行该语句意味着执 行在DECLARE CURSOR语句中定义的SELECT查询,并使游 标指针指向查询结果的第一条记录。
从游标中读记录
FETCH [[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ] <游标名> [INTO :<主变量1>,:<主变量2> …]
第7章 数据库编程基础
本章主要内容
1. 游标 2.动态SQL 3.存储过程 4.触发器
SQL的宿主使用
• SQL不仅可以作为独立的数据语言直接以交 互的方式使用;SQL还可以作为子语言嵌入 在宿主语言中使用,这里所说的宿主语言 就是指我们常见的高级程序设计语言,如C 语言等。
把SQL嵌入到宿主语言中使用必须要解决以 下三个方面的问题:
Cursor
为了解决宿主语言一次只能处理一条记 录,而SQL语言一次处理多条记录的矛盾, 引入了Cursor的概念。相关的语句有:
DECLARE CURSOR OPEN FETCH CLOSE DEALLOCATE
DECLARE CURSOR语句的格式是:
DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSOR FOR <SELECT-查询块> [FOR {READ ONLY|UPDATE [OF 〈列名〉[,〈列名〉…]]}]
使用游标的DELETE命令
DELETE FROM <表名> WHERE CURRENT OF <游标名>
2.动态SQL
利用游标进行删除和更新操作
• 在T-SQL中,CURSOR不仅仅可以用来浏 览查询结果,还可以用UPDATE语句修改 CURSOR对应的当前行或用DELETE命令 删除对应的当前行。
使用游标的UPDATE命令
UPDATE <表名> SET <列名>={<表达式>|NULL} [,<列名>={<表达式>|NULL}…] WHERE CURRENT OF <游标名>
INSENSITIVE说明用数据的临时拷贝来定义游标,所有对游标的 请求都反映在这个临时表上,因此这时的游标实际上是不允许修 改的; SCROLL说明可以用所有的方法来存取数据,允许删除和更新 (假定没有使用INSENSITIVE选项); FOR READ ONLY或FOR UPDATE说明游标为只读的或可修改的。 <SELECT-查询块>定义一个游标(文件),它的内容是<SELECT查询块>的查询结果(多个记录组成的临时表)。
如何解决嵌入识别问题?
• 为了区分主语言和SQL语句,为SQL语句加 一个识别前缀,常用前缀格式是: EXEC SQL
• 比如: EXEC SQL INSERT INTO 职工 VALUES('WH8','E20',1560)
• 计算机的编译系统如何识别这些前缀?
预编译技术
• 在编译之前首先将SQL语句转换为主语言的 合法函数调用或合法语句,这个过程称为 预编译。
使用游标的一个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 …
该语句的功能是取出游标的当前记录并送入主变量,同时使游标指 针指向下一条记录(NEXT,或根据选项指向某条记录)。这里的游标必 须是已经说明并打开了的,INTO后的主变量要与在DECLARE CURSOR 中SELECT的字段相对应。
关闭游标
CLOSE <游标名>
释放游标
DEALLOCATE <游标名>
主变量说明的例:
EXEC SQL BEGIN DECLARE SECTION ; char whnumb[5] char city[12] int wh_area
EXEC SQL END DECLARE SECTION;
使用主变量的例子:
UPDATE 仓库 SET 面积 = :wh_arபைடு நூலகம்a WHERE 仓库号 = :whnumb ;
相关文档
最新文档