文档介绍:西华师范大学计算机学院
第三章关系数据库标准语言SQL (续4)
第三章关系数据库标准语言SQL
SQL概述
数据定义
查询
数据更新
视图
数据控制
嵌入式SQL
小结
嵌入式 SQL
SQL语言提供了两种不同的使用方式:
交互式: SQL语句作为独立的数据语言,以交互的方式使用
嵌入式:用某种传统的编程语言(例如:C、PASCAL、COBOL等)编写程序,但程序中的某些函数或某些语句是SQL语句。这种方式下使用的SQL语言称为嵌入式SQL(EmbeddedSQL),其中传统的编程语言称为宿主语言(或主语言)
为什么要引入嵌入式SQL
SQL语言是非过程性语言,事务处理应用需要程序根据不同的条件执行不同的任务,如果单单使用SQL语言,很难实现这类应用。
这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充
DBMS有两种方法处理嵌入式SQL语言:预编译和扩充编译程序法。
预编译是指由DBMS的预编译器对源程序进行扫描,识别出其中的SQL语句,把它们转换为宿主语言调用语句,使宿主语言编译器能够识别,最后由编译器将整个源程序编译为目标码。
扩充编译程序法是指修改和扩充宿主语言的编译程序,使其能够直接处理SQL语句。目前使用较多的是预编译方法,其处理过程如下图所示。
嵌入式SQL语句的处理过程
其中关键的一步,是将嵌有SQL的宿主语言源代码通过预编译器(plier)变成纯宿主语言源代码。RDBMS除了提供SQL语言接口外,一般都提供一批用宿主语言编写的SQL函数,供应用程序调用DBMS的各种功能。如建立与DBMS的连接及连接的环境、传送SQL语句、执行SQL语句、返回执行结果和状态等等。这些函数组成SQL函数库。预编译器将SQL语句编译成宿主语言对SQL函数的调用,从而把嵌有SQL的宿主语言源代码变成纯宿主语言源代码,在编译连接后执行。
使用嵌入式SQL必须解决以下几个问题:
(1)预编译器不能识别和接受SQL语句,因此,嵌入式程序中,应有区分SQL语句与宿主语言语句的标记。
(2)DBMS和宿主语言程序(程序工作单元)如何进行信息传递。
(3)一条SQL语句原则上可产生或处理一组记录,而宿主语言一次只能处理一个记录,必须协调这两种处理方式。
为了区分SQL语句与主语言语句,需要:
前缀:EXEC SQL
结束标志:随主语言的不同而不同
以C为主语言的嵌入式SQL语句的一般形式
EXEC SQL <SQL语句>;
例:EXEC SQL DROP TABLE Student;
以COBOL作为主语言的嵌入式SQL语句的一般形式
EXEC SQL <SQL语句> END-EXEC
例: EXEC SQL DROP TABLE Student END-EXEC
嵌入SQL语句
说明性语句
嵌入SQL语句数据定义
可执行语句数据控制
数据操纵
允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句
允许出现说明语句的地方,都可以写说明性SQL语句
嵌入式SQL语句与主语言之间的通信
将SQL嵌入到高级语言中混合编程,程序中会含
有两种不同计算模型的语句
SQL语句
描述性的面向集合的语句
负责操纵数据库
高级语言语句
过程性的面向记录的语句
负责控制程序流程