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数据库技术 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!