[计算机软件及应用]数据库编程
第八章 数据库编程
◆嵌入式SQL
◆存储过程
◆ ODBC编程
8.1 嵌入式 SQL
引入嵌入式SQL的原因
SQL语言是非过程性语言 事务处理应用需要高级语言 这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充
嵌入式SQL
当一个程序即要访问数据库,又要处理数据时,把SQL语言嵌入程序设计语言即宿主语言中,将SQL语言访问数据库的功能和宿主语言的数据处理功能相结合,是目前解决该问题的最有效途径。这样使用的SQL称为嵌入式SQL(Embedded SQL, ESQL)
8.1.1 嵌入式SQL的处理过程
嵌入式SQL的基本处理过程
为了区分SQL语句与主语言语句,需要:
前缀:EXEC SQL
结束标志:随主语言的不同而不同
一般形式
以C为主语言的嵌入式SQL语句的一般形式
EXEC SQL ;
例:EXEC SQL DROP TABLE Student ;
宿主语言的编译程序不能识别SQL语句,所以首要问题要解决如何区分宿主语言的语句和SQL语句。
1)嵌入识别问题
DBMS将SQL语句的查询结果或执行状态必须交给宿主语言/应用程序处理(通过SQLCA);运行时,宿主语言的数据通过变量(称为主变量)也要能够交给SQL使用。
2)宿主语言与SQL语言的数据通信问题
宿主语言一般一次处理一条记录;SQL语言常常处理的是记录(元组)的集合,其查询结果通常是含多个记录的一张表。
3)宿主语言的单记录与SQL的多记录的问题
说明:SQL作为子语言嵌入在宿主语言中使用必须要解决以下三方面问题:
8.1.2 嵌入式SQL语句与主语言之间的通信
将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句
SQL语句: 描述性的面向集合的语句-负责操纵数据库
高级语言语句: 过程性的面向记录的语句-负责控制程序流程
工作单元之间的通信方式
(1) SQL通信区
? 向主语言传递SQL语句的执行状态信息
? 主语言能够据此控制程序流程
(2) 主变量
? 主语言向SQL语句提供参数
? 将SQL语句查询数据库的结果交主语言进一步处理
(3) 游标
? 解决集合性操作语言与过程性操作语言的不匹配
一、SQL通信区(SQL Communication Area, SQLCA)
SQL被执行时,DBMS将产生的各类系统信息(如执行状态信息)写入系统通信区,应用程序在调用SQL后,可通过读取数据通信区中信息来确定语句执行情况。
使用SQLCA:
SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE
如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错
应用程序每执行完一条SQL 语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理
定义SQLCA:
用EXEC SQL INCLUDE SQLCA加以定义
二、主变量( Host Variable)
? 主变量的分类与作用
输入主变量:由应用程序赋值,SQL引用。
输出主变量:SQL对其赋值或设置状态信息,返回给应 用程序。
SQL语句使用宿主语言的程序变量来输入/输出数据,这样的变量简称为主变量(Host Variable)
? 指示变量(Indicator Variable)
1)什么是指示变量:
整型变量
用来“指示”所指主变量的值或条件
2)指示变量的用途:
输入主变量可以利用指示变量赋空值
输出主变量可以利用指示变量检测出是否空值,值是否被截断
? 在SQL语句中说明主变量和指示变量
BEGIN DECLARE SECTION
………
……… (说明主变量和指示变量)
………
END DECLARE SECTION
?在SQL语句中使用主变量
SQL语句中的主变量名前要加冒 (:)作为标志
?在SQL语句使用指示变量
(1)指示变量前也必须加冒 (:)标志
(2)必须紧跟在所指主变量之后
例如:
:Hgrade :Gradeid
三、 游标(Cursor)
? 游标的概念
游标是系统为用户开设的一个数据缓冲区,存放SQL的执行结果。
? 为什么要使用游标
当查询结果超过一个元组时,不能一次性将结果值赋给宿主语言的变量,因为主变量仅能保存一个数据,而不是一组数据。
(1)定义游标
EXEC SQL DECLARE SX CURSOR FOR
SELECT Sno, Sname, Ssex,
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树首页概览33020 人正在系统学习中 相关资源:悦客服,首家可订制的在线客服系统软件-C#工具类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!