- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DB08数据库第八章教学ppt课件
第8章 数据库编程;8.1 嵌入式SQL;8.1.1 嵌入式SQL的处理过程;主语言程序
含ESQL语句;为了区分SQL语句与主语言语句, 所有SQL语句必须加前缀EXEC SQL,以(;)结束:
EXEC SQL SQL语句;;8.1.2 嵌入式SQL语句与主语言之间的通信;数据库工作单元与源程序工作单元之间的通信:
1. SQL通信区
向主语言传递SQL语句的执行状态信息
使主语言能够据此控制程序流程
2. 主变量
主语言向SQL语句提供参数
将SQL语句查询数据库的结果交主语言进一步处理
3. 游标
解决集合性操作语言与过程性操作语言的不匹配;一、SQL通信区;SQLCA使用方法:
定义SQLCA
用EXEC SQL INCLUDE SQLCA定义
使用SQLCA
SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE
如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错
应用程序每执行完一条SQL 语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理;二、主变量 ;主变量的类型
输入主变量
输出主变量
一个主变量有可能既是输入主变量又是输出主变量;指示变量:
一个主变量可以附带一个指示变量(Indicator Variable)
什么是指示变量
指示变量的用途;在SQL语句中使用主变量和指示变量的方法
1) 说明主变量和指示变量
BEGIN DECLARE SECTION
.........
......... (说明主变量和指示变量)
.........
END DECLARE SECTION
;2) 使用主变量
说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现
为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(:)作为标志
3) 使用指示变量
指示变量前也必须加冒号标志
必须紧跟在所指主变量之后;三、游标(cursor);游标
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果
每个游标区都有一个名字
用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理;四、建立和关闭数据库连接;五、程序实例;int main(void) /*C语言主程序开始*/
{
int count = 0;
char yn; /*变量yn代表yes或no*/
printf(Please choose the department name(CS/MA/IS): );
scanf(%s, deptname); /*为主变量deptname赋值*/
EXEC SQL CONNECT TO TEST@localhost:54321 USER
SYSTEM /MANAGER; /*连接数据库TEST*/
EXEC SQL DECLARE SX CURSOR FOR /*定义游标*/
SELECT Sno, Sname, Ssex, Sage /*SX对应语句的执行结果*/
FROM Student
WHERE SDept = :deptname;
EXEC SQL OPEN SX; /*打开游标SX便指向查询结果的第一行*/;for ( ; ; ) /*用循环结构逐条处理结果集中的记录*/
{
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage;
/*推进游标,将当前数据放入主变量*/
if (sqlca.sqlcode != 0) /* sqlcode != 0,表示操作不成功*/
break; /*利用SQLCA中的状态信息决定何时退出循环*/
if(count++ == 0) /*如果是第一行的话,先打出行头*/
printf(\n%-10s %-20s %-10s %-10s\n, Sno, Sname, Ssex, Sage);
printf(%-10s %-20s %-10s %-10d\n, HSno, HSname, HSsex, HSage);
/*打印查询结果*/
printf(UPDATE AGE(y/n)?); /*询问用户是否要更新该学生的年龄*/
do
文档评论(0)