嵌入式SQL

  SQL查询语言对数据库查询功能是很强的,写SQL查询语句比用一般编程语言编码实现相同的查询要简单得多。但是在有些情况下仍然需要使用一般通用编程语言如PASCAL、C语言等。这是因为SQL语言是非过程化语言,有些查询要求必须通过程序过程实现,包括与用户交互、查询的特殊输出及对数据表中数据较为复杂的处理等。
  为此,可将SQL语句嵌入到一般通用编程语言程序中去,SQL语句负责对数据库中数据的提取及操作,它所提取的数据逐行提交给程序,程序中其他语句负责数据的处理和传递。SQL标准定义了许多语言的嵌入式SQL,例PASCAL、PL/1、Fortran、C和Cobol。 SQL语句嵌入的语言称为宿主语言。宿主语言中使用的SQL结构称为嵌入式SQL。
  一个使用嵌入式SQL的程序在执行前, 一般要进行两次编译。首先预编译, 嵌入的SQL请求被宿主语言的声明及允许运行时访问数据库的过程所代替。 然后由宿主语言编译且得到执行代码。为使预处理能识别嵌入式SQL语句,在SQL语句前加上“EXEC SQL”标记。
  嵌入C或Pascal的查询语句格式为:
  EXEC SQL SELECT 目标列INTO:变量 FROM 基本表[或视图][WHERE条件表达式]…
  其中主变量为宿主语言程序的变量,前面加“:”作为标识, 以和SQL变量相区分。
  例如查找学号为S1的学生姓名、性别、出生年份放到变量xm1,xb1,csnf1中,语句为:EXEC SQL SELECT 姓名,性别,出生年份 INTO :xm1,:xb1,:csnf1 FROM 学生 WHERE 学生号=‘S1’
  一般宿主语言执行一次只处理一个元组,而在实际问题中,查询结果是多个元组,则要使用游标。
  例如下面一段程序:
  EXEC SQL DECLARE C CURSOR FOR SELECT 姓名,性别,出生年份 FROM 学生;
  EXEC SQL OPEN C;
  LOOP
  EXEC SQL FETCH C INTO :xm1,:xb1,:csnf1;
  PRINT xm1,xb1,csnf1;
  GO TO LOOP
  上例中第一句从学生表中选取姓名、性别、出生年份三列形成结果表,并定义游标C。“ OPEN C”激活游标,使C指向第一条记录。在LOOP的循环体内FETCH语句将C所记录的值赋给主变量xm1,xb1,csnf1。宿主语言语句PRINT对取出值进行处理。
  循环返回命令GO TO LOOP使上述两句重复执行, 并将游标顺次指向第二行,第三行…直到表的末尾,此时FETEH语句将关闭游标。

嵌入式SQL简介

(1)概念

    SQL语言提供了两种不同的使用方式

一种是在终端交互式方式下使用独立语言由用户在交互环境下运行一种是将SQL语言嵌入到某种高级语言中使用,利用高级语言的过程性结构弥补SQL语言在实现复杂应用方面的不足。称为嵌入式SQL(Embedded SQL)

    嵌入SQL的高级语言称为主语言或宿主语言

    PL/1、COBOL、FORTRAN、C语言等可以做为嵌入SQL的高级语言。

    一般来讲:在终端交互方式下使用的SQL语句也可用在应用程序中,但是,这两种方式细节上会有许多差别,在程序设计的环境下,SQL语句要做某些必要的扩充。

 

(2)关于宿主语言的编译

详细信息…

  DBMS采用两种方法处理宿主型数据库语言SQL,一种是预编译,另一种是修改和扩充主语言使之能处理SQL语句

  目前采用较多的是预编译的方法。即由DBMS的预处理程序对源程序进行扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码

  更详细的讨论将在第十一章的语言处理

 

 

(3)嵌入式SQL的一般形式
    在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXEC SQL和SQL语句的结束标志。一般形式如下:

       EXEC SQL <SQL语句> ;

说明:

    *) 其中SQL语句的结束标志则随主语言的不同而不同,例如在PL/1和C中以分号(;)结束,在COBOL中以END-EXEC结束。

举例:

详细信息…

如下一条交互形式的SQL语句:
    DROP TABLE Student;
嵌入到C程序中,应写作:
   
EXEC SQL DROP TABLE Student;

    *) 嵌入SQL语句根据其作用的不同,可分为可执行语句说明性语句两类。可执行语句又分为数据定义、数据控制、数据操纵三种。   
    *) 在宿主程序中,任何允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句;任何允许出现说明性高级语言语句的地方,都可以写说明性SQL语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值