科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道ORACLE系统开发过程中的几条实用技术

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  作者:哈尔滨工业大学法院街13号 1226信箱(150001) 徐淑锋 左   美云   Oracle系统使用方便,功能强大,便于维护,安全性好。经过十多   年的发展,已成为功能最齐全的、最受欢迎的关系数据库管理系统。

作者:中国IT实验室 来源:中国IT实验室 2007年10月7日

关键字: 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

  作者:哈尔滨工业大学法院街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"或返回的是基表中
  最后一行,
  <0 表示SQL执行不成功,程序有错或系统故障。
  在子结构sqlca.sqlerrm中存放出错的正文信息,其中:
  sqlca.sqlerrm.sqlerrmc:存放对应 sqlca.sqlcode中出错代码
  的正文信息;
  sqlca.sqlerrm.sqlerrml:存放正文信息的长度。
  所以,程序调试过程中,我们只要在需要高度的SQL语句后面加上
  如下的一段程序:
  printf("sqlcode is :%d\n",sqlca,sqlcode);
  if sqlca.sqlcode<0 {
  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操作系统命令,用以完成一些通用程序本身所完成不了的
  功能,从而提高了通用程序的实用价值。
  除上述四条经验之外,对于如何解决一屏多记录分块设置,零页的
  使用及快速查找当前记录,合理解决分区空间不足等问题,由于篇幅所
  限,就不一一详述了。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件