利用高级语言的过程性结构来弥补SQL语言实现复杂应用.pptVIP

利用高级语言的过程性结构来弥补SQL语言实现复杂应用.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Embedded SQL -Software School of Hunan University- 2006.09 利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。 嵌入SQL的高级语言称为主语言或宿主语言。 在混合编程中,SQL语句负责操作数据库,高级语言语句负责控制程序流程。 预编译方法:由DBMS的预处理程序对源程序扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译器能识别它,最后由主语言编译器将整个源程序编译成目标码。 嵌入式SQL的一般形式 所有的嵌入式SQL语句都不得必须加前缀EXEC SQL 例如: 在C语言中: EXEC SQL SQL语句 EXEC SQL DROP TABLE Student; 在COBOL中:EXEC SQL SQL语句 END-EXEC 嵌入式SQL与主语言的通信 向主语言传递SQL语句执行状态信息,使语言能够据此信息控制程序流程,用SQL通信区(SQLCA)实现。 主语言向SQL语句提供参数,主要用主变量(Host Variable)实现; 将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor)实现。 SQL通信区 SQL是一个数据结构,在应用程序中用EXEC SQL INCLUDE SQLCA加以定义。 SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE。 每次执行完SQL语句后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理,如果SQLCODE等于预定的常量SUCCESS,则表示SQL语句成功,否则在SQLCODE中存放错误代码。 SQL通信区 例如:在执行删除语句后,不同的执行情况SQLCA中有下列不同的信息: 成功删除并有删除的行数(SQLCODE=SUCCESS) 无条件删除警告信息 违反数据保护规则,拒绝操作 没有满足条件的行,一行也没有删除 由于各种原因,执行出错 主变量(Host Variable) 主语言程序变量:主变量 输入主变量:由应用程序对其赋值,SQL语句引用 输出主变量:由SQL语句对其赋值或设置状态信息,返回给应用程序 一个主变量既可是输入主变量也可是输出主变量。 指示变量(Indicator Variable) 指示变量:主变量附带的可选变量,是一个整型变量,用来”指示”所指主变量的值或条件。可以指示输入主变量是否为空,可以检测输出主变量是否为空值,值是否被截断。 所有主变量和指示变量必须在SQL语句 BEGIN DECLARE SECTION与END DECLARE SECTION之间进行说明。 SQL语句的主变量名和指示变量前要加冒号作为标志,且指示变量必须紧随主变量之后。 在SQL语句之外,主变量和指示变量直接引用,不须加冒号。 游标(Cursor) SQL语言面向集合,一条SQL语句原则上可以产生或处理多条记录,而主语言是面向记录的,一组主变量一次只能存放一条记录。所以仅用主变量不能完全满足SQL语句向应用程序输出数据的要求。 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。 用户可以通过游标逐一获得数据,并赋给主变量,交由主语言处理。 程序实例(SQL in C) EXEC SQL INCLUDE SQLCA; ……………………定义SQL通信区 EXEC SQL BEGIN DECLARE SECTION; ……….主变量说明开始 CHAR Sno(5) CHAR Cno(3) INT Grade; EXEC SQL END DECLARE SECTION; ……….主变量说明结束 Main() { EXEC SQL DECLARE C1 CURSOR FOR ……….定义游标 SELECT Sno, Cno, Grade FROM SC; EXEC SQL OPEN C1; ………. ………. 打开游标 for( ; ; ) { 程序实例(SQL in C) EXEC SQL FETCH C1 INTO :Sno, :Grade; ……….推进游标指针并将当前数据放入主变量 if(sqlca.sqlcodeSUCCESS ……….利用SQLCA中的状态信息决定何时退出循环 break; prin

您可能关注的文档

文档评论(0)

2837587390 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档