一、包含嵌入式SQL 程序的处理过程
 
  1. 由预处理程序对源程序进行扫描,识别出ESQL语句
  2. 把它们转换成主语言的函数调用语句,使主语言编译程序能够识别
  3. 最后由主语言的编译程序将整个源程序编译成目标码
  4. 将编译后生成的目标代码与库函数(SQL函数库)链接在一起生成可执行代码
二、标识SQL语句
 
C语言中, 引导符为exec sql 终止符为 ;
exec sql <SQL语句>;
Java语言中, 引导符为 # sql 终止符为 ;
#sql{<SQL语句>;
 
三、程序与数据库的连接和断开
 
SQL标准推荐的连接方式
exec sql connection to target [AS connection-name] [user: user-name];
程序运行过程中可以修改当前连接
exec sql set connection connection-name;
所有操作完成后,关闭数据库连接: exec sql disconnection [connection];
例:
exec sql connect :user_name identified by :user_pwd; exec sql commit release;
exec sql connect to localhost.test user sa.12345; exec sql disconnect all;
 
四、嵌入式SQL与主语言之间的通信
  1. SQL通信区
SQLCA: 
SQLCA(SQL Communication Area)是一个结构体变量,声明以后分配一个内存区,保存SQL语句执行的状态信息,用于DBMS与应用程序的通信
定义SQLCA:
exec sql include sqlca;
使用SQLCA
例如:sqlca.sqlcode
        sqlca.sqlstate
             
 
sqlcode: 整型字段
= 0 表示该SQL语句执行成功, 没有发生错误和异常。
> 0 表示执行了该SQL语句, 但有异常。
< 0 表示由于DB、系统、网络或程序有错误, 语句未执行
例:if (sqlca.sqlcode != 0) /* 判断数据库操作是否成功*/
          break;
  1. 主变量
主变量(Host Variable):在ESQL中使用的主语言程序变量,包括输入主变量与输出主变量
使用主变量的例子:
exec sql select Sname, Sage into :vSname, :vSage
from Student
where Sname= :specName;
使用into+主变量可以保存单条查询结果,使用主变量前要加冒号
主变量声明:
exec sql begin declare section;
char vSname[10], specName[10]=“张三”; int vSage;
exec sql end declare section;
 
指示变量(IndicatorVariable):主变量附带一个整型变量, 用于“指示”所指主变量的值或条件
例如:
exec sql select sno into :id indicator :indic
from student where sage > 25;
if (indic = = -1) //指示变量
{ printf(“The id is null”); }
else
{......}
例如:
if(...) gradeid=-1;
exec sql insert into SC(Sno, Cno, Grade) values (:stdno, :couno, :gr:gradeid);
注意:不能在搜索条件中使用<:主变量:指示变量>这种形式
  1. 游标
系统为结果记录集开设一个数据缓存区,游标是指向数据缓存区的指针,通过指针的移动,逐一从缓存区获取记录,赋给主变量
游标的定义:
exec sql declare <游标名> cursor for
<SQL语句>;
例如:
exec sql declare cur_student cursor for
select Sno, Sname, Sclass from Student where Sclass= :vClass order by Sno
打开游标
exec sql open <游标名>;
读取元组
exec sql fetch <游标名> into :主变量1, :主变量2......;
关闭游标
exec sql close <游标名>;
例如:
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;
  1. SQL结果的提交与撤销
结果的提交:
exec sql commit work;
结果的撤销:
exec sql rollback work;
 
 
 

嵌入式SQL的更多相关文章

  1. 3.7 嵌入式SQL

    可以放入所有高级语言中去,如C 因为,SQL是过程性语句,需要高级语言的非过程性处理集合的分类处理 一.一般形式 所有的SQL语句都必须加前缀EXEC SQL SQL语句完成结束标志(:或END EX ...

  2. C语言中嵌入式SQL语句

    原文:[转载]C语言中嵌入式SQL语句 http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx原文地址 实验内容: 掌握SQL Serve ...

  3. SQL入门(4): 嵌入式SQL语言

    本节讲述内容: 1.嵌入式SQL 语言概述 2.变量声明与数据库连接 3.数据集与游标 4.可滚动游标与数据库的增删改 5.状态捕捉以及错误处理机制 (一)嵌入式SQL语言 之前我们所学的都是交互式S ...

  4. 第14讲:嵌入式SQL语言(基本技巧)

    一.交互式SQL的局限 & 嵌入式SQL的必要性 专业人员(如DBA)可以熟练地运用交互式SQL语言,但普通用户却不是那么容易上手,所以需要通过数据库应用程序来使用数据库.编写一个可以与数据库 ...

  5. 数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

    2018-02-19 18:03:54 一.数据操纵语言(Data Manipulation Language) 数据操纵语言是指插入,删除和更新语言. 二.视图(View) 数据库三级模式,两级映射 ...

  6. 什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查

     1 什么是Pro*C/C++ 1.通过在过程编程语言C/C++中嵌入SQL语句而开发出的应用程序 2.什么是嵌入式SQL 1.在通用编程语言中使用的SQL称为嵌入式SQL 2.在SQL标准中定义 ...

  7. 数据库系统学习(十)-嵌入式SQL语言之动态SQL

    第十讲 嵌入式SQL语言之动态SQL 静态SQL 区别变量和属性:高级语言向嵌入式SQL传递变量的方法 动态SQL 动态构造SQL语句是应用程序员必须掌握的重要手段 SQL语句的动态构造示例 根据界面 ...

  8. 数据库系统学习(九)-嵌入式SQL语言之基本技巧

    第九讲 嵌入式SQL语言之基本技巧 901 什么是嵌入式SQL语言 交互式SQL语言的局限性 嵌入式SQL语言 交互式和嵌入式语言的对比 高级语言中使用嵌入式语言需要解决的问题 902 程序与数据库连 ...

  9. 数据库-第八章 数据库编程-8.1 嵌入式SQL

    嵌入式SQL 一.嵌入式SQL的处理过程 1.嵌入式SQL语句的基本格式 2.嵌入式SQL的处理过程 3.主语言访问数据库的基本步骤 ⅰ建立数据库连接 ⅱ定义必要的主变量和数据通信区 ⅲ访问数据库并返 ...

随机推荐

  1. PHP 2:从一个实例介绍学习方法

    原文:PHP 2:从一个实例介绍学习方法 在前面我已经描述了PHP,Apache以及MySQL的安装与配置.下面将介绍一下我如何学习PHP.首先我自己已经有了一些编程经验,就拿我自己而言,已经熟悉C/ ...

  2. Libgdx Box2D现实---这缓释微丸(两:Box2D介绍)

     Box2D官方网站 : http://box2d.org/ Box2D v2.1.0用户手冊翻译 : http://blog.csdn.net/complex_ok/article/catego ...

  3. 终于有人把O2O、C2C、B2B、B2C的区别讲透了!

    终于有人把O2O.C2C.B2B.B2C的区别讲透了! 一.O2O.C2C.B2B.B2C的区别在哪里? O2O是online to offline分为四种运营模式: 1.online to offl ...

  4. 所有MVP文章

    http://msdn.microsoft.com/zh-cn/dd346590.aspx

  5. 我的Android 4 学习系列之开始入手:配置开发环境与理解Hello World!

    目录 如何安装Android SDK.创建开发环境和调试项目 移动设计中一些注意事项 使用Android虚拟设备.模拟器和其他开发工具 如何安装Android SDK.创建开发环境和调试项目 下载和安 ...

  6. WebService它CXF这三个音符(Service接口实现类)

    ITeacherServiceImpl.java: /** * @Title:ITeacherServiceImpl.java * @Package:com.you.service.impl * @D ...

  7. DHTML【3】--HTML

    从这一节开始我们就开始介绍HTML的标签了,首先我们来介绍Form标签. Form标签也称Form表单,From是与服务器交互最重要的标签,此标签必须做到随手就写,写完就正常运行的地步. 那么什么是F ...

  8. 逐步在Windows上结合CopSSH + msysGit安装安装Git Server同时集成Git使用Visual Studio

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  9. .net平台下socket异步通讯(代码实例)

    你应该知道的.net平台下socket异步通讯(代码实例) 1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2,然后添加服务端代码,添加命名空间,界面上 ...

  10. Tomcat7 Cluster 集群

    Tomcat7 自带的集群功能是通过session复制完成的,现有两个复制方式: DeltaManager: 将session复制到所有tomcat节点中,不管是否有相应的应用(it will rep ...