📄 esql编程使用说明.txt
字号:
EXEC SQL CLOSE cursor1;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
}
例题程序7 (定位修改)
/*=============================================================================
This is a sample program which uses UPDATE STATEMENT at
CURRENT Cursor.
==============================================================================*/
EXEC SQL BEGIN DECLARE SECTION ;
INT status;
CHAR sno[10],sname[15],city[20];
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;
main()
{
int i;
strcpy(sno,"ttttt");
strcpy(sname,"ttttt");
strcpy(city,"ttttt");
status=1000;
EXEC SQL CONNECT "cobase:cobase" ;
EXEC SQL DECLARE cursor1 CURSOR FOR
SELECT SNO, SNAME, STATUS,CITY FROM S_TEST FOR UPDATE;
EXEC SQL OPEN cursor1;
printf("sno sname status city\n");
for(;;)
{
EXEC SQL FETCH cursor1 INTO :sno,:sname,:status,:city;
if (userca.sqlcode==2000) break;
printf("%8s %8s %8d %8s \n",sno,sname,status,city);
/* Delete the first record that be fetched */
printf(" update current ?(0/1)");
scanf("%d",&i);
if (i==1)
{printf("input sno=");
scanf("%s",sno);
printf("\ninput sname=");
scanf("%s",sname);
printf("\ninput status=");
scanf("%d",&status);
printf("\ninput city=");
scanf("%s",city);
EXEC SQL UPDATE S_TEST SET sno=:sno,sname=:sname,status=:status,city=:city
WHERE CURRENT of cursor1;
EXEC SQL COMMIT;
}
}
EXEC SQL CLOSE cursor1;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
}
第四章 提交/回滚事务
本章定义一事务或叫逻辑工作单元.为了保证数据库的一致性,在ESQL程序中,程序开发人员可以控制事务是否提交或回滚.一事务通常可以理解为一个完整程序对数据库进行的所有操作.一个事务也可以理解为是一个逻 辑工作单元.
4.1 逻辑工作单元
一个逻辑工作单元是一组SQL语句和插入的主语言码的集合.COBASE把它们作为一个整体来处理.
在逻辑工作单元这一级上,COBASE保证了数据的一致性,这就意味着要么完成所有的操作,要么每条语句都不执行.
如果在处理一个逻辑工作单元期间出现了系统或用户程序失败,那么COBASE就自动把数据恢复到该逻辑工作单元开始之前的状态,程序失败时,COBASE检测完错误就恢复数据,若系统故障,COBASE在重新启动时恢复数据.
当遇 到第一个可执行的SQL语句(除了CONNECT)时,就隐含着一个逻辑工作单元的开始,COMMIT 和ROLLBACK语句结束一个逻辑工作单元.在ESQL程序中,说明语句并不开始一个逻辑单元.
COMMIT语句保证了当前逻辑单元上的所有操作都完整地提交给了数据库.ROLLBACK语句取消对当逻辑工作单元所作的操作 ,把数据库恢复到当前逻辑工作单元开始前的状态.
4.2 COMMIT 语句
该语句结束当前逻辑工作单元,把在逻辑工作单元期们的所有变化提 交给数据库 .其格式如下:
EXEC SQL COMMIT;
在程序结束之前,应该明确地结束它的工作单元,否则,若程序成功结束后,COBASE自动提交所有的变换,若程序非正常结束,就恢复到最近 没有提交的逻辑工作单元.
COMMIT语句不影响主变量的内容 或主程序的控制流.
每条DDL语句的执行,自动发出COMMIT操作,这就是说 ,DDL语句跟在DML语句后面,那么以前的DML语句就自动提交组数据库.一个DDL语句结束当前逻辑工作单元,释放该程序拥有的所有锁.
4.3 ROLLBACK语 句
该语句将数据库恢复到当前逻辑工作单元之前的状态,结束当前的逻辑工作单元.该语
句不影响主变量的内容或主程序的控制流.其格式如下:
EXEC SQL ROLLBACK;
4.4 DISCONNECT 语句
当应用程序不再使用COBASE数据库时,应该使用DISCONNECT语句释放程序所有与COBASE数据库有关的资源,并退出数据库,脱离COBASE环境.其格式如下:
EXEC SQL DISCONNECT;
第 五 章 错误检测和恢复
本章我们介绍如何使用USERCA来进行错误检测和处理。
5.1 USERCA的结构
USERCA是ESQL程序用来传送执行信息的结构,每执行完一条执行性SQL语句, COBASE都把执行信息写入USERCA中,对于说明性SQL语句,则无执行信息.谨慎的程序员应该在每一SQL语句执行完成后,检查USERCA结构中内容来确信语句的执行是否成功,并根据其中的信息作适当的处理.在ESQL中,USERCA的结构如下:
typedef struct
char caid[10]; /* userca ID */
long calen; /* userca length */
long sqlcode; /* sql code */
long sqltype; /* sql statement type */
int sqlerrmlen; /* sql error message length */
char sqlerrmtext[80]; /* sql error message text */
int sqlreturnflag; /* sql return flag(def or data) */
long sqlpl; /* sql process lines (per fetch st) */
long sqlcoml; /* sql communication lines (per com) */
long sqltotal; /* select_total_lines */
char sqlwarn[7]; /* sql warnning flag */
short sqlstsave; /* sql_statement_save flag */
user_com_area;
struct user_com_area userca;
该结构的各元素的意义描述如下:
userca.caid 通讯区标识.
userca.calen 通讯区长度.
userca.sqlcode 记录每一SQL语句执行完成情况.其取值如下:
0 表示执行成功.
2000 表示没有返回行或最后一行已取完.
userca.sqltype SQL语句的类型.
userca.sqlerrmlen 执行SQL语句错误 信息的长度.
userca.sqlerrmtext 执行SQL语句错误 信息的正文.
userca.sqlreturnflag
userca.sqlpl
userca.sqlcoml
uaseca.sqltotal
userca.sqlwarn
userca.sqlwarn[0] 警告检查位;
userca.sqlwarn[1] 返回值截断警告;
userca.sqlwarn[2] 在集函数中忽略空值警告;
userca.sqlwarn[3] SELECT_LIST 个数与 INTO 子句项
个数不符的警告;
userca.sqlwarn[4] DML操作涉及每一行的警告;
userca.sqlwarn[5] SQL语句引起事务回滚的警告;
userca.sqlwarn[6] DELETE语句对于FOR_UPDATE的行操作警告;
userca.sqlstsave
第六章 使用说明书
Cobase支持两种方式对数据库中的数据进行访问—交互方式和嵌入C程序(ESQL)的方式。Cobase采用的是Client/Server结构,Client端将对数据库的各种访问请求发送到服务器方,交由服务器方处理。服务器对发送来的请求进行分析和处理,然后将执行结果发送回Client端。交互式(ISQL)和嵌入式C程序都是运行在Client端的进程,通过以网络方式和服务器建立连接来进行通讯。下面简要介绍这两种方式的使用。
一.启动Cobase:
无论使用这两种方式中的哪一种,在和数据库进行交互之前都要首先启动Cobase的DBMS。
?;启动Cobas的DBA进程:运行Cobase.exe将启动Cobase的DBA,这时屏幕将出现两个窗口,一个是控制窗口,一个是消息窗口。控制窗口用于完成对系统的控制,包括初始化系统,选择和系统的连接方式,及断开连接,退出系统等。以后的用户操作都在控制窗口中进行,消息窗口只用于显示一些系统信息。
?;初始化系统:第一次启动Cobase需对系统初始化。选中主菜单中的File菜单项,在弹出的子菜单中选中Initialize,在弹出的对话框中选中“确定”即可完成对系统的初始化。该步骤只需在第一次进入系统时调用,或当你认为需要清除系统中已存在的所有数据,对整个系统初始化时使用。
?;选择和Cobase DBMS的连接方式:在控制窗口的主菜单中选中File,在弹出的子菜单中选择NetWork Share,以网络方式和Cobase建立连接。在弹出的对话框提示DBA启动成功后,进入下一步。
二.退出Cobase:
?;Cobase DBA Shutdown:在退出Cobase之前将DBA Shutdown。选中File菜单项,在弹出的子菜单中选择Normal Shutdown,那么DBA将shutdown。如果Client端的进程非正常终止,则选择Immediate Shutdown。如果再需要Cobase DBMS的服务,则须重新启动DBA,以网络方式和Cobase建立连接,然后启动服务器进程shadow.
?;退出Cobase:选中File菜单项,在弹出的子菜单中选择Exit。
三.交互式SQL(Interactive SQL)访问
交互式SQL提供了一种交互式的方法对数据库中的数据进行访问。在交互式的界面中只能执行交互式的SQL语句—DDL语句,DML语句,COMMIT和ROLLBACK。并且DML语句中不能含有主变量。交互式SQL不支持游标。ISQL将输入的SQL语句发送给服务器方执行,最后负责从服务器方将数据取回来,显示在交互式的界面中。
?;启动ISQL:执行SISQL.EXE,启动ISQL。
?;登录到Cobase:在弹出的窗口菜单中选择FILE,然后选择Logon子菜单项进行登录。登录的用户名为cobase,口令也为cobase。
?;进入SQL命令状态:在产生的窗口中,由三部分组成。第一部分标记为SQL data,用于对查询结果的显示。第二部分标记为Statistics,用于显示对SQL语句执行结果的反馈信息。第三部分标记为SQL Command,用于输入要求执行的SQL语句。首先在SQL Command中输入“SQL”,要求以下进入SQL语句的执行状态。
?;执行SQL语句:在SQL Command编辑框中输入要求执行的SQL语句,一次一条,每个语句要求以分号结束。输入完毕后,单击“Execute”语句即被执行,执行结果将在SQL data或Statistics中被显示。
?;退出ISQL:在SQL Command中输入“logout”,即可退出ISQL,同时也将关闭服务器方的shadow进程。
四.嵌入式SQL(Enbeded SQL)编程方式
嵌入式SQL在前面的章节中已经介绍了。我们把在C语言中嵌入SQL语句的程序简称为EC程序。开发一个EC程序的基本步骤如下:
1.编辑ESQL程序:可以使用文本编辑器如VC的编辑器编制一个ESQL程序,以.ec作为文件的扩展名。
2.预编译:使用COBASE的预编译器ETE对ESQL源程序进行预处理,该编译器将源程序中嵌入的SQL语句翻译成C++语言形式的对Cobase库函数的调用,生成文件的扩展名为.cpp.
启动ETE.exe,在弹出的对话框中,输入要进行预处理的.ec文件。(该文件本身要以.ec结尾,但在这里输入的文件名无须加上.ec后缀,预编译器会自动查找以.ec结尾的同名文件。)
ETE 的调用格式为:
ETE <filename>
<filename> 为含有嵌入式SQL语句(ESQL)的C/C++语言文本文件名;
3.生成项目:创建一个相应的项目,将预编译生成的.cpp文件加入到该项目中。
4.项目设置:选中VC的Project/setting,在弹出的对话框中选择Link标签。
在Object/Library Modules文本框中加入库文件wetelib.lib,wccilib.lib;
选中Tools/Options,在弹出的对话框中选择Directories/Library files,设置 各库文件的路径。
5.运行:
?;启动Cobas:运行Cobase.exe将启动Cobase,这时屏幕将出现两个窗口,一个是控制窗口,一个是消息窗口。控制窗口用于完成对系统的控制,包括初始化系统,选择和系统的连接方式,及断开连接,退出系统等。以后的用户操作都在控制窗口中进行,消息窗口只用于显示一些系统信息。
?;初始化系统:第一次启动Cobase需对系统初始化。选中主菜单中的File菜单项,在弹出的子菜单中选中Initialize,即可完成对系统的初始化。该步骤只需在第一次进入系统时调用,或当你认为需要清除系统中已存在的所有数据,对整个系统初始化时使用。
?;和Cobase建立连接:在控制窗口的主菜单中选中File,在弹出的子菜单中选择NetWork Share,和Cobase建立连接。
?;运行你的应用程序
6.Shutdown:在应用程序终止之后,选择File/NormalShutdown,和DBMS断开连接。如果你应用程序非正常终止,那么选择File/ImmediateShutdown。重新建立连接只要再选中NetWork Share即可,无须退出Cobase。
7.退出系统:成功Shutdown之后,选择File/Exit退出Cobase。
补充说明
本次数据库上机实习的主要目的是熟悉关系数据库的设计和实现的基本原理,掌握使用EC编程的基本方法。
Cobase是数据库教研室正在研制开发的第一个国产关系数据库管理系统,它还存在着很多不完善的地方,如果给大家的使用带来了一定的困难,希望大家能够谅解。
把Cobase作为本次上机实习的教学软件,我们是经过研究考虑的。Cobase虽然在很多方面不够完善和坚固,对有些功能不能给予很好的支持,但是对于一般数据库的基本操作还是可以完成的。对本次上机实习来说,Cobase提供的功能是完全可以满足作业提出的所有要求的。Cobase EC提供的基本功能和使用方法在ESQL.DOC中有详细说明,大家可以参照其中给出的例子程序编制自己的应用程序。在完成作业之余,欢迎大家对其中基本功能存在的不足提出宝贵意见。
另外有几个问题需要大家注意:
1.在该版本中,ISQL和EC应用程序不能同时启动;
2.用NOTEPAD编辑的文件缺省以.txt结尾,所以预编译器找不到,请大家用VC的编辑器编辑,并存为.ec结尾的文件。
3.在Cobase初始化的时候需要申请足够的空间,所以请大家检查Cobase所在的盘是否有足够的空间。
4.在运行过程中如果出现了意外操作,建议大家先将Cobase Immediate Shutdown,再重新启动。
5.COBASE程序目录COBASE应放在某一分区的根目录下,并且用户的应用程序必须与COBASE目录在同一分区下。
6.COBASE ISQL界面中用到了一个MicroSoft的控件msflxgrd.ocx,如果目标机上没有的话,应把该文件拷贝到系统目录 /windows/system32/ 下。该文件包含在cobase.zip中。
这次上机实习题目的要求都很基本,鉴于Cobase所提供功能的局限,希望大家不要把过多的精力放在优化和界面等方面。希望大家上机顺利,如果有问题请多于我们联系。我们的Email地址是 linda@db.pku.edu.cn , leonhard@db.pku.edu.cn, gaoxm@cis.pku.edu.cn .
--------------------------------------------------------------------------------
此文章相关评论:
该文章有2个相关评论如下:(点这儿可以发表评论)
johnsilver 发表于: 2002/12/21 11:55am
太好了,我正需要,感谢版主.
大梦 发表于: 2002/12/21 04:32pm
好!
--------------------------------------------------------------------------------
Copyright ? ChinaUnix.net * 转载请注明出处及作者
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -