ESQL编程使用说明( 二 )


开始和结束的.
在这两个语句中,只可以定义 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

推荐阅读