一、包含嵌入式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. Fedora20-Xfce音频视频解码器及解决无声音问题[已解决]

    安装rpmfusion源 http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-20.noarch.rpm http:// ...

  2. NCache实现Oracle数据与分布式缓存数据同步的3个步骤

    多层次结构的应用程序是目前发展的趋势,这种程序都需要庞大的数据库支持.而数据传输的能力直接影响程序性能,成为程序可扩展性的瓶颈.因此很多开发者开始在程序中使用内存分布式缓存来提高程序性能. 同时,内存 ...

  3. 【SSRS】入门篇(一) -- 创建SSRS项目

    原文:[SSRS]入门篇(一) -- 创建SSRS项目 在本篇中,您将学习如何在 SQL Server Data Tools (SSDT) 中创建报表服务器项目. 报表服务器项目用于创建在报表服务器中 ...

  4. css3中webkit-box的用法(平分父元素)

    display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分.目前box- ...

  5. Delphi的注册表操作

    转帖:Delphi的注册表操作 2009-12-21 11:12:52 分类: Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息.     一.创 ...

  6. 12个很少被人知道的CSS事实

    之前没有认真的研究过,padding-bottom的值如果是百分比,那么它的实际值是根据父类的宽度来调整的.我还以为是根据这个元素的本身的宽度来定义呢?汗..padding-top/padding-l ...

  7. idea中output log4j中文乱码

    1.设置tomcat中的VM optins:-Dfile.encofing=UTF-8 2.idea安装目录bin文件夹中idea.exe.vmoptions.idea64.exe.vmoptions ...

  8. C#排序算法

    随笔- 41  文章- 0  评论- 25  C#排序算法小结   前言 算法这个东西其实在开发中很少用到,特别是web开发中,但是算法也很重要,因为任何的程序,任何的软件,都是由很多的算法和数据结构 ...

  9. codeforces #275 div2题解

    A题大意: 给你l,r,问你在l~r之间,是否存在 a和b互质 , b和c互质 ,但是 a,c不互质 的情况:其中l<=a<b<c<=r;如果存在,就输出a,b,c;不存在就输 ...

  10. 企业架构研究总结(25)——TOGAF架构开发方法(ADM)之迁移规划阶段

    1.8 迁移规划(Migration Planning) 企业架构开发方法各阶段——迁移规划 1.8.1 目标 本阶段的目标是: 确保实施和迁移规划与企业中各种管理框架相协调. 通过对每个进行中的成本 ...