没有合适的资源?快使用搜索试试~ 我知道了~
首页esql编程指南适合初学者
esql编程指南适合初学者
需积分: 15 69 浏览量
更新于2023-05-26
评论
收藏 114KB DOC 举报
很实用的一本教程 适合初学者适用,尤其是在银行做系统开发的人员,会有实践性的帮助
资源详情
资源评论
资源推荐

第一章 ESQL 介绍
本章对 ESQL 做一概括介绍,主要讨论怎么使用 ESQL、ESQL 的基本的概念和定义、
ESQL 程序的各个部分和 ESQL 程序中语句的类型.
SQL 语言是非过程化语言,大部分语句的执行与其前面或后面的语句无关 ,而一些高级编
程语言都是基于如循环,条件等结构的过程化语言,尽管 SQL 语言非常有力,但它却没有过程
化能力.若把 SQL 语言嵌入到过程化的编程语言中,则利用这些结构,程序开发人员就能设计
出更加灵活的应用系统,具有 SQL 语言和高级编程语言的良好特征,它将比单独使用 SQL 或
C 语言具有更强的功能和灵活性.
COBASE RDBMS 提供两种工具在主语言中编程来存取 COBASE 数据库中的数据.即高级
语言预编译程序接口(ESQL)和高级语言的函数调用接口(CCI).目前这些工具仅支持 C 语言.
COBASE RDBMS 提供的 ESQL 工具把含有 SQL 语句的 C 程序转化为可存取和操纵
COBASE 数据库中数据的 C 程序,作为一编译器,ESQL 把输入文件中的 EXEC SQL 语句在
输出文件中转化为适当的 CCI 函数调用.输出文件则可以正常的 C 程序的方式被编译、连接
和执行.
1.1 ESQL 中的基本概念
ESQL 中的基本概念主要有:
1.嵌入的 SQL 语句:
嵌入的 SQL 语句是指在应用程序中使用的 SQL 语句.该应用程序称作宿主程序,书写该程
序的语言称作宿主语言.嵌入的 SQL 语句与交互式 SQL 语句在语法上没有太大的差别,只是
嵌入式 SQL 语句在个别语句上有所扩充.如嵌入式 SQL 中的 SELECT 语句增加了 INTO 子
句,以便与宿主语言变量打交道.此外,嵌入式 SQL 为适合程序设计语言的要求,还增加了许多
语句,如游标的定义、打开和关闭语句等等.
2.执行性 SQL 语句和说明性 SQL 语句:
嵌入的 SQL 语句主要有两种类型:执行性 SQL 语句和说明性 SQL 语句.执行性 SQL 语句
可用来连接 COBASE,定义、查询和操纵 COBASE 数据库中的数据,每一执行性语句真正对
数据库进行操作 ,执行完成后,在 USERCA 中存放执行信息.说明性语句用来说明通讯域和
SQL 语句中用到的变量. 说明性语句不生成执行代码,对 USERCA 不产生影响.
3.事务:
事务是逻辑上相关的一组 SQL 语句.COBASE 把它们视作一个单元.为了保持数据库的一
致性,一事务内的所有操作要么都做,要么都不做.
1.2 ESQL 程序的组成和运行
在 ESQL 程序中嵌入的 SQL 语句以 EXEC 作为起始标识,语句的结束以";"作为标识.在嵌
入的 SQL 语句可以使用主语言(这时是 C 语言)的程序变量(即主变量),这时主变量名前加冒
号(:)作为标志,以区别于字段名.
ESQL 程序包括两部分:程序首部和程序体.程序首部定义变量,为 ESQL 程序做准备, 程序
体包括各种 SQL 语句来操纵 COBASE 数据库中的数据.
编制并运行 ESQL 程序比单独使用纯 C 语言多一个预编译过程,通常具有以下几个步骤:
1.编辑 ESQL 程序(可利用编辑软件如: EDLIN, WS 等进行编辑).程序保后缀为.ec.
2.使用 COBASE 的预编译器 ETE 对 ESQL 源程序进行预处理,该编译器将源程序中嵌入的
SQL 语言翻译成标准 C 语言,产生一个 C 语言编译器能直接进 行编译的文件.其文件的扩展
名为.cpp。该 cpp 文件可以和普通的 cpp 文件一样被放入一个工程中被 C++编译器编译,连

接最后运行。
对 COBASE 的预编译器的使用的详细说明见第六章.
第二章 ESQL 程序的基本结构
ESQL 程序由两部分组成:程序首部和程序体.
2.1 程序首部
每一个 ESQL 程序的开始,就是程序的首部,它包括以下三部分:
1.DECLARE 部分:
说明特殊的主变量,这些变量区别于纯 C 语言程序中的变量,COBASE 使用这些变量与程
序之间相互作用.
2.INCLUDE USERCA 语句: 说明一个 SQL 语句的通讯域(USERCA),它提供了错误处理,其
功能等价于代替 C 语言中的#INCLUDE 语句.
3.CONNECT 语句: 建立程序与 COBASE 之间的连接.
2.1.1DECLARE 部分:(描述部分)
在 DECLARE SECTION (描述部分),定义所有在 SQL 语句中用到的主变量,定义部分是以:
EXEC SQL BEGIN DECLARE SECTION;
和 EXEC SQL END DECLARE SECTION;
开始和结束的.
在这两个语句中,只可以定义 SQL 语句中用到的主变量,每个预编译单元只允许一个
BEGIN/END DECLARE SECTION (描述部分),但是一个程序可以包含许多独立的预编译单
元。若一个主变量或指示变量在 ESQL 程序中的 SQL 语句中引用,但它没有在 描述部分中
定义,则程序在预编译时就会出现错误信息.
在这两个语 句中可以定义的变量有六种类型:INT,SHORT,CHAR,FLOAT,NUMBER,DATE.
其中 CHAR 型允许定义二维数组,其它类型只允许定义一维数组,不允许有指针类型 ,在此处
变量可以赋值.
例如:
EXEC SQL BEGIN DECLARE SECTION;
int sno;
char sname[11];
short snameid;
EXEC SQL END DECLARE SECTION;
(1)主变量:
就是用在 SQL 语句中的主语言变量.主要用于程序变量和数据库内部交换数据之用,它们
的数据类型必须是在主语言中描述部分里定义过的 ,而且它们的数据类型必须和 COBASE
数据库中已定义的表中的数据类型相匹配.
例如:
SELECT 姓名, 等级
FROM 供应商
INTO :sname, :status
WHERE 供应商号=:sno;
该语句表示,从供应商表中在供应商号与主变量 sno 一致的地方选择供应商姓名和供应商
等级,COBASE 把结果传送到主变量 sname,status 中.

主变量使用规则:
1.必须在描述部分明确定义.
2.必须使用与其定义相同的大小写格式.
3.在 SQL 语句中使用主变量时必须在主变量前写一个冒号":",在纯 C 语言 语句中则不要
在主变量前写冒号.
4.不能是 SQL 命令的保 留字.
5.在一条语句中只能使用一次.
2.1.2 SQL 通讯域
每个 COBASE 应用程序必须提供对错误 的处理,为了说明 SQL 通讯域(USERCA),必须在
每个 COBASE 预编译程序中写上:
EXEC SQL INCLUDE USERCA;
USERCA 是一结构 ,每一嵌入的执行性 SQL 语言的执行情况在其执行完成后写入
USERCA 结构中的各变量中, 根据 USERCA 中的内容可以获得每一嵌入 SQL 语句执行后的
信息,编制程序时就可以做适当的处理.对其的详细说明见第五章.
2.1.3 连接 COBASE
在 存取 COBASE 数据之前,每一个预编译程序必须与 COBASE 连接.连接时,程序必须提
供用户名和口令,由 COBASE 进行校验,若口令和用户名正确,方可登录 COBASE,获得使用权,
否则,COBASE 拒绝登录,则程序就不能使用数据库.缺省的用户名为“cobase”,口令为
“cobase”。
连接 COBASE 的格式如下:
EXEC SQL CONNECT <用户名>:<用户口令>.
CONNECT 语句必须是 ESQL 程序中第一条可执行的 SQL 语句.
2.2 程序体
程序体可以包含许多 SQL 语句,以查询或处理存储在 COBASE 数据库中的数据.
在应用程序中所包含的 SQL 语句,可以查询或操纵存储在 COBASE 中的数据,这些语句叫
做数据操纵语言(DML),应用程序体也可以包含 DDL 语句,用来建立或定义数据结构,如表、
视图或索引.在用户程序中写入的任何有效的 SQL 语句都可以被执行,只需要把完整的
SQL 语句按嵌入式的要求写入 C 语言的合适位置即可.嵌入在 C 语言中的 SQL 语句以
EXEC SQL 开始,以";"为结束标志.SQL 语句中可以嵌入主变量,主变量前应有":"标志.如下面
例子都 是嵌入式 SQL 语句:
EXEC SQL UPDATE 供应商
SET 姓名='李 红'
WHERE 供应商号='S1';
/* 把供应商号是 S1 的供应商姓名改为 '李 红'*/
EXEC SQL INSERT INTO 供应商(供应商号,姓名,等级,城市)
VALUES((:sno,:sname,:status,:city));
/* 根据宿主变量值插入供应商表中 */
EXEC SQL DELETE FROM 供应商
WHERE 等级 IS NULL;
/*删除供应商等级是空值的供应商*/

从上面例可以看出,静态的增,删,改语句与交互方式没有太大的差别,对于查询语句就没有
那么简单,查询语句在下一章中介绍.
现用几个例题程序加以说明.
例题程序 1 (建立一表并向表中插入数据)
/
*=====================================================================
=========
This is a sample program which include SQL sentence about
CREATE ,INSERT a table.
======================================================================
========*/
EXEC SQL BEGIN DECLARE SECTION ;
CHAR sno[10],sname[10],city[10];
INT status;
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;
main()
{
int i;
EXEC SQL CONNECT "cobase:cobase" ;
EXEC SQL CREATE TABLE S_TEST /* Create a table named S_TEST */
(SNO CHAR (9),
SNAME CHAR (20),
STATUS INT ,CITY CHAR(10));
printf(" create table success,insert?");
printf(" 0 ---- no ");
printf(" 1 ---- yes ");
printf(" choice:");
scanf("%d",&i);
while(i)
{
printf("input sno:");
scanf("%s",sno);
printf("input sname:");
scanf("%s",sname);
printf("input status:");
scanf("%d",&status);
printf("input city:");
scanf("%s",city);
EXEC SQL INSERT INTO S_TEST(SNO,SNAME,STATUS,CITY)
VALUES ((:sno,:sname,:status,:city));
printf("continue?");
printf(" 0 ----terminate ");
剩余16页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0