嵌入式SQL

SQL语言是作为一种独立的自含式语言,它是联机终端用户在交互式环境下使用,交互式SQL简称(ISQL)。

SQL还可以作为一种数据子语言嵌入某些主语言中,SQL可以嵌入到C、C++中使用、称之为嵌入式SQL,简称(ESQL)。

主要区别

交互式SQL:

select sname, sage from student where sname='xy';

嵌入式SQL: 以宿主语言C语言为例,

exec sql select sname, sage into :vsname, :vsage from student where sname='xy';

主要区别:

(1) exex sql 是一个引导词, 它引导sql 语句, 将SQL语句预编译成C编译器可识别的语句.

(2) 增加 into 子句, 用于把SQL 语句的检索结果赋给高级语言的程序变量

(3) 用冒号开头 表示高级语言的程序变量 :vsname , :vsage

冒号很重要, 用于区分是程序变量 还是 表的字段!!

游标语句的使用

在嵌入方式下,SQL的变量是集合型的,而主变量则是标量型的,因此SQL变量不能直接供主程序使用,而需要有一种机制将SQL变量中的集合量逐个去除送入主变量内,在提供主程序使用,提供此种机制的方法是在嵌入式SQL中增加一组游标(Cursor)语句

1. 游标的概念

①游标是一个指向某检索记录集的指针

②作用:通过该指针的移动,可依次处理记录集中的每一个记录

3. 游标的使用

单行:可以将结果直接传送到宿主主程序的变量中, select ... into ...

exec sql select sname, sage into :vsname, :vsage from studentwhere sname=:specname;

多行:

①需要先定义一个游标,再打开(执行),然后开始逐行处理,最后关闭:

exec sql declare cur_student cursor for select Sno, Sname, Sclass from Student where Sclass = '035101';
        exec sql open cur_student;
        exec sql fetch cur_student into :vSno, :vSname, :vSclass;
        ...
        exec sql close cur_student;

②游标可以定义一次,多次打开(执行),多次关闭。

③标准的游标始终是自开始向结束方向移动的,每fetch一次,向结束方向移动一次,这样一条记录只能被访问一次,再次访问该记录只能关闭该游标后重新打开。

4. 可滚动游标

①可滚动游标不同于标准的游标,它可在记录集之间灵活移动,从而可使每条记录被反复访问

②定义方式:

exec sql declare 游标名 [INSENSITIVE] [SCROLL] cursor for ...

③使用方式:

exec sql fecth [NEXT | PRIOR | FIRST | LAST | [ABSOLUTE | RELATIVE] value_spec] from 游标名 into ...

· NEXT:向结束方向移动一条

· PRIOR:向开始方向移动一条

· FIRST:移动到第一条

· LAST:移动到最后一条

· ABSOLUTE value_spec:定向检索指定位置的行,value_spec取值范围为1~当前记录集最大值

· RELATIVE value_spec:相对当前记录向前或向后移动

· value_spec:为正数则向结束方向移动,为负数则向开始方向移动

④可滚动游标在移动前需判断是否到结束位置EOF,或到开始位置BOF


本文摘自:

全国计算机等级考试教材 三级数据库技术教程——主编:赵宏杰

以及网络资源https://www.cnblogs.com/xuying-fall/p/9425036.html

原文发布于微信公众号 - ellipse数据库技术(ellipse16)

原文发表时间:2019-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券