嵌入式SQL

一、包含嵌入式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;

时间: 2024-11-15 00:00:03

嵌入式SQL的相关文章

数据库原理-嵌入式sql

嵌入式SQL是一种将SQL语句直接写入C语言,COBOL,FORTRAN, Ada等编程语言的源代码中的方法.借此方法,可使得应用程序拥有了访问数据以及处理数据的能力. 以下是嵌入式sql基本处理过程: 嵌入式sql语句与主语言之间的通信 sql向主语言传递状态信息,是主语言能控制sql程序流程-sql通信区 主语言向sql提供变量-主变量 sql执行结果交给主语言处理-主变量,游标 sql通信区 SQL语句执行后,系统要反馈给应用程序若干信息,主要包括描述系统当前工作状态和运行环境的各种数据,

[转]什么是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标准中定义了很多中语言的嵌入式SQL 3.各个厂商对嵌入式SQL的具体实现不同 3.什么是Pro*C/C++ 1.在C/C++语言中嵌入SQL语句而开发出的应用程序. 2.目的:使c/c++这种效率语言称为访问数据库的工具. 4.嵌入式SQL的载体是宿主语言 宿主语言 Pro程序 C/C++ Pro*C/C++ F

什么是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标准中定义了很多中语言的嵌入式SQL 3.各个厂商对嵌入式SQL的具体实现不同 3.什么是Pro*C/C++ 1.在C/C++语言中嵌入SQL语句而开发出的应用程序. 2.目的:使c/c++这种效率语言称为访问数据库的工具. 4.嵌入式SQL的载体是宿主语言 宿主语言          Pro程序 C/C++

C语言中嵌入式SQL语句

原文:[转载]C语言中嵌入式SQL语句 http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx原文地址 实验内容: 掌握SQL Server 2000的预编译程序NSQLPREP.EXE的使用(以课本例题1进行调试): 实验步骤: 一.数据库环境配置 1.创建xuesheng数据库,建立student表等: 2.关闭sql server 2000服务管理器: 3.将devtools文件夹拷贝到:C:\Program Files\Mic

C++嵌入式SQL写考勤/点名功能程序

数据库原理课程的实验要用嵌入式SQL实现一个职工考勤功能的程序,在网上学习许久发现C++操作mysql数据库的资料身份少.好不容易在VS2017用C++连接Mysql数据库后,却又发现<数据库系统概论>书里讲的方法(EXEC,通信区什么的)好像用不了qwq(当然可能是我没找到使用的办法). 于是只能上网找资料模仿着实现: 连接数据库的方法:https://blog.csdn.net/jintingbo/article/details/90631985 https://blog.csdn.net

SQL中的四种语言DDL,DML,DCL,TCL

1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema. DDL是SQL语言的四大功能之一.用于定义数据库的三级结构,包括外模式.概念模式.内模式及其相互之间的映像,定义数据的完整性.安全控制等约束DDL不需要commit.CREATEALTERDROPTRUNCATECOMMENTRENAME 2.DML(Data Manipulation Lang

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

Mysql数据库理论基础之三 --- 数据类型及SQL结构化查询语句使用

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

ORACLE PL/SQL编程总结(一)

----------PL/SQL 程序设计简介----------- 1.1   SQL与PL/SQL 1.1.1   什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过程语言的扩展.从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL.它现在已经成为一种过程处理语言,简称PL/SQL.目前的PL/SQL包括两部分,一部分是数据库引擎部分:另一部分是可嵌入到许多产