分享
 
 
 

ORACLE系统开发过程中的几条实用技术

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

作者:哈尔滨工业大学法院街13号 1226信箱(150001) 徐淑锋 左

美云

Oracle系统使用方便,功能强大,便于维护,安全性好。经过十多

年的发展,已成为功能最齐全的、最受欢迎的关系数据库管理系统。

它不但成功地运行在大型机上,而且在小型机和微型机上也广泛使用

。笔者在开发过程中积累了一些实用技术,在这里挑选几条与大家交

流。

一、Foxbase 与Oracle数据库的双向转换技术

DBaseⅢ、FoxBase曾是国内外应用广泛的数据库系统,很多企业

单位都以此建立了自己的管理信息系统。随着Oracle在国内的推广,

特别是一些大型的企业需要开发新型的基于Oracle RDBMS的网络管理

系统,以适应管理发展与企业规模扩大的需要。在新旧系统转换的过

程中,我们希望能够充分利用已有的数据库资源,避免重复输入。为此

,我们使用了PRO*C程序,在DOS环境下执行经过PRO*C预编译、MSC编译

和联接后形成的.EXE文件,直接将.DBF数据库文件转入相应的Oracle

表中。

通过对.DBF为文件结构的剖析,在Oracle数据库中建立具有相应

列(Column)的数据表。具体做法是:根据.DBF库文件各字段的定义,生

成一个字符串,用PRO*C的动态定义语句EXECUTE IMMEDIATE执行SQL语

句"CREATE TABLE",在Oacle数据库中建立一个数据表,然后通过循环

语句把由.DBF文件读出的记录数据加入到Oracle数据表中。在循环体

中,按数据文件的格式,每次读取一条记录,并转换为合适的字符串,运

用PRO*C的动态定义语句EXECUTE IMMEDIATE执行SQL语句"INSERT IN-

TO",把读出的数据插入数据表中。

反过来,Oracle数据库也可以转换到FoxBase数据库。思路是:先

从Oracle的数据字典中取出表定义、字段定义;再按照.DBF库文件的

存储结构,直接生成.DBF库文件的标识部、字段描述部,用Oracle表字

段的相应数据填写;最后将Oracle表中的记录写到生成的FoxBase数据

记录体域,从而实现了Oracle数据库与FoxBase数据库的双向转换。

二、巧用文本编辑软件提高Oracle开发效率

Oracle系统的文本编辑功能及全屏幕编辑功能并不太尽人意,在

系统开发过程中,我们如能结合使用国内流行的文本编辑软件(如CCED

、WPS等),会收到更好的效果。

1、建立基表

SQL*PLUS是一种非过程化的交互式命令语言,在该环境下,键入的

SQL命令被保存在SQL缓冲区中,新键入的语句将冲掉上一次键入的语

句,而且,在SQL*PLUS下,只能用命令I、C、D、A进行行编辑,不能进行

全屏幕编辑,而建立一个基表要定义许多字段,命令输入中难免发生错

误,这给开发者增加了难度。

解决的方法是:用文本编辑软件建立一个扩展名.SQL的命令文件,

文件中应包含建表命令"CREATE TABLE";然后,在SQL*PLUS下用START

命令运行该文件,如有错误可再回到文本编辑状态下修改。

这种方法很适合开发初期建立大量的基表、视图。通过充分利用

文本编辑软件中的块复制、行复制等功能,可大大减少输入工作量。

2、更新FORM

建立FORM时通过人机对话的方式,产生两类文件:一类是INP文本

文件,记录了人机对话的内容及FORM的格式;另一类是FRM可执行文件,

此文件是用IAG对INP文件编译后生成的。

在生成FORM的过程中,如果人机对话有误或屏幕格式需调整,只需

用文字编辑软件对INP文件进行修改,修改后用IAG命令进行编译即可,

不必重新进行整个FORM的设计。如果在已做好的FORM中有些块定义和

需要做的FORM中块定义完全相同,就可以把已有的INP文件拷贝过来直

接使用,此方法为FORM的建立提供了一种快速有效的途径。

所以,文本编辑软件的有效使用,增加了Oracle系统应用开发的灵

活性。

三、PRO*C程序调试过程中的出错检验技巧

在PRO*C程序中,使用SQL语句对数据库数据进行操作时,并不能保

证每个SQL语句一定能执行成功,而这种导致SQL操作不成功的错误在

预编译、编译和连接过程中却又常常发现不出来。为了解决SQL语句

的出错检验问题,我们在程序中利用通讯区SQLCA返回的信息来检测SQ

L语句的执行情况。

在PRO*C程序开头使用了"EXEC SQL INCLUDE SQL-CA"语句,它包

含名为SQLCA的文件,在SQLCA文件中定义了sqlca的结构:

struct sqlca{

char sqlcaid[8];

long sqlcabc;

long sqlcode;

struct{

unsigned short sqlerrml;

char sqlerrmc[70];

} sqlerrm;

char sqlerrp[8];

long sqlerrd[6];

char sqlwarn[8];

char sqlext[8];

};

struct sqlca sqlca;

sqlca是个结构变量,系统将SQL语句执行情况的信息存入到相应

的结构成员中。其中,sqlca.sqlcode中存放的是出错代码,规定:

=0 表示执行成功,

sqlca.sqlcode +1043表示"No row found"或返回的是基表中

最后一行,

在子结构sqlca.sqlerrm中存放出错的正文信息,其中:

sqlca.sqlerrm.sqlerrmc:存放对应 sqlca.sqlcode中出错代码

的正文信息;

sqlca.sqlerrm.sqlerrml:存放正文信息的长度。

所以,程序调试过程中,我们只要在需要高度的SQL语句后面加上

如下的一段程序:

printf("sqlcode is :%d\n",sqlca,sqlcode);

if sqlca.sqlcode

printf("sqlca.sqlerrm is:%s\n",sqlca.sqlerrm.sqler-rmc

);

exit(0);

}

我们根据sqlca.sqlcode的值判断SQL是成功。根据sqlca.sqlerr

m的内容判断错误的原因,对程序进行重新的修改,从而提高了程序检

测的效率。

四、运用动态语句实现程序通用设计

Oracle数据库管理系统提供了四种类型的动态语句:

A:非查询的无参数动态语句

B:非查询的带参数动态语句

C:查询动态语句

D:使用描述符的动态语句

在程序中,将一个SQL语句放到一个字符串变量之中,利用动态语

句即可将该SQL语句执行。因此,在应用系统设计过程中,只要变换作

为SQL语句的字符串内容便可执行不同的SQL语句。如果SQL语句字符

串从磁盘文件中读来,那么,只要改变该磁盘文件的内容,就能动态地

控制SQL语句的执行内容,而不需对应用程序作任何改变,正是由于这

个特点,使得程序通用设计成为一种可能。

用动态语句,我们就可以通过键盘方式或其它方式改变SQL语句,

运用一个程序完成对不同基表的数据插入、删除、修改和查询,特别

是通用报表打印的设计中,更体现了动态语句的特点。在设计过程中,

我们不把表头、表尾及表的格式这些难以调整和维护的内容限定在程

序语句中,而是把它加入到动态查询程序中。在维护报表系统时,我们

同样不用修改报表程序。同时,在程序加入"用户出口"调用别的可执

行程序或DOS操作系统命令,用以完成一些通用程序本身所完成不了的

功能,从而提高了通用程序的实用价值。

除上述四条经验之外,对于如何解决一屏多记录分块设置,零页的

使用及快速查找当前记录,合理解决分区空间不足等问题,由于篇幅所

限,就不一一详述了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有