一、包含嵌入式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. openwrt驱动与应用程序的联系

    应用程序与驱动之间需要进行命令的传递,因而它们之间需要共同定义一套双方都可以识别的数据结构,实际使用时它们include的是名字和内容相同但位置不同的头文件. 比如spi_gpio_ad7193.h这 ...

  2. [译]Java垃圾回收是如何工作的

    说明:这篇文章来翻译来自于Javapapers 的How Java Garbage Collection Works 这部分教程是为了理解Java垃圾回收的基础以及它是如何工作的.这是垃圾回收系列教程 ...

  3. 如何有效的遍历django的QuerySet

    最近做了一个小的需求,在django模型中通过前台页面的表单的提交(post),后台对post的参数进行解析,通过models模型查询MySQL,将数据结构进行加工,返回到前台页面进行展示.由于对dj ...

  4. Visual Studio 使用调试技巧

    Visual Studio 使用调试技巧 这篇文章来源于http://damieng.com/blog/2014/02/05/8-visual-studio-debugging-tips-debug- ...

  5. hrift 的序列化机制

    Thrift 个人实战--Thrift 的序列化机制 前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码 ...

  6. OpenGl绘制螺旋线

    /** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteB ...

  7. Foundation 学习笔记

    笔记内容 学习笔记-段玉磊 Stanford course Foundation and Attributed Strings Dynamic binding id 是一个指向任何未知对象的指针,(t ...

  8. html+js+ashx+easyui+ado.net权限管理系统

    分享一个html+js+ashx+easyui+ado.net权限管理系统   EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也 ...

  9. MVC应用程序请求密码的功能(二)

    MVC应用程序请求密码的功能(二) 在完成<MVC应用程序请求密码的功能(一)>http://www.cnblogs.com/insus/p/3471534.html之后,如果你照着做,所 ...

  10. Push Notification总结系列之移动客户端定位服务

    Push Notification系列概括: 1.Push Notification简介和证书说明及生成配置 2.Push Notification的iOS处理代码和Provider详解 3.Push ...