嵌入式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),作者:ellipse16

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库开发工具

    1、数据库系统工具分类:数据库管理工具(加载工具、备份工具、文件重组工具和性能监控工具等)和数据库系统设计和开发工具(CASE工具、应用开发工具、通讯接口)。

    ellipse
  • 关系数据库的标准语言SQL

    又称结构化查询语言(Structured Query language),是集DDL、DML和数据控制功能于一体的数据库语言。

    ellipse
  • 游标

    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。

    ellipse
  • 浅谈大型Web系统架构

    动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等...

    用户1257215
  • 深入理解Android IPC机制之Binder机制

    Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有的进程间通信IPC手段包括(Internet Process Connectio...

    xiangzhihong
  • 深入Go的错误处理机制(一)使用

    程序运行过程中不可避免的发生各种错误,要想让自己的程序保持较高的健壮性,那么异常,错误处理是需要考虑周全的,每个编程语言提供了一套自己的异常错误处理机制,在Go...

    阿伟
  • 面部表情与情绪识别的关联存争议,AI的度量指标真的可信吗?

    随着人工智能应用场景越来越多,研究人员希望它们能自动完成一些情感任务,比如看着一个人的脸,了解他们的感受。

    AiTechYun
  • Android跨进程通信IPC之13——Binder总结

    我们知道在Linux系统中,进程间的通信方式有socket,named pipe,message queue, signal,sharememory等。这几种通...

    隔壁老李头
  • [004]我眼中的Binder(完结篇)

    经过前面三章的学习,各位对Binder框架,AIDL机制已经有一个宏观的概念了,更多的细节,各位需要自己再去研究,推荐老罗的《Android系统源代码情景分析》...

    王小二
  • Android跨进程通信IPC之6——Binder框架

    为了让大家更好的理解Binder机制,我们先来看下Android的整体架构。因为这样大家就知道在Android架构中Binder出于什么地位。 用一下官网上的...

    隔壁老李头

扫码关注云+社区

领取腾讯云代金券