会计考友 发表于 2012-8-4 13:54:49

Oracle辅导:Oracle数据库开发经验谈(1)

ORACLE数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成为IT业界瞩目的焦点。岭澳核电站的数据库平台采用了ORACLE7.3作为后端平台,前端选择了ORACLE公司的 DEVELOPER 2000 及DESIGNER 2000作为开发工具,采用了目前流行的CLIENT/SERVER模式。本人在ORACLE系统的开发中,就ORACLE的整套开发工具提出一些自己的体会,供同行参考。
  一. ORACLE SQL PLUS 使用技巧:
  ----①查找重复记录:
  SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB
  WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
  _PIPE_PREFAB D
  WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
  EM5_PIPE_PREFAB.DSNO=D.DSNO);
  ----执行上述SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录。
  ----删除重复记录:
  DELETE FROM EM5_PIPE_PREFAB
  WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
  _PIPE_PREFAB D
  WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
  EM5_PIPE_PREFAB.DSNO=D.DSNO);
  ----执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录。
  ----② 快速编译所有视图
  ----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。
  SQL >SPOOL ON.SQL
  SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
  COMPILE;’ FROM TAB;
  SQL >SPOOL OFF
  然后执行ON.SQL即可。  SQL >@ON.SQL
   当然,授权和创建同义词也可以快速进行,如:
  SQL >SELECT ‘GRANT SELECT ON ’
  ||TNAME||’ TO USERNAME;’ FROM TAB;
  SQL >SELECT ‘CREATE SYNONYM
  ‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;
  ③ 用外联接提高表连接的查询速度
  在作表连接(常用于视图)时,常使用以下方法来查询数据:
  SELECT PAY_NO, PROJECT_NAME
  FROM A
  WHERE A.PAY_NO NOT IN (SELECT PAY_
  NO FROM B WHERE VALUE >=120000);
  ----但是若表A有10000条记录,表B有10000条记录,则要用掉30分钟才能查完,主要因为NOT IN要进行一条一条的比较,共需要10000*10000次比较后,才能得到结果。该用外联接后,可以缩短到1分左右的时间。
  ----⑤ 怎样在数据库触发器中使用列的新值与旧值
  ----在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。
  二.ORACLE DEVELOPER 2000使用技巧:
  ----① 改变FORM(FMX模块)运行时的Runform4.5的题头:
  ----DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改为自己定义的标题,
  ----1. 在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE
  ----2. 在此触发器中写如下代码:
  set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
  SYSTEM 欢迎使用');
  ----② 如何隐藏菜单中的window选项:
  ----在创建自己的菜单时,最后选项总有window项,下面介绍如何去掉它,
  ----1. 创建一个Menu
  ----2. 在Menu中建立一个Item,命名为WINDOW。
  ----3. 设置该Item属性如下:
  ----Menu Item Type:Magic
  Command Type:Null
  Magic Item:Window
  Lable:为空
   ----③ 怎样创建动态下拉列表List
  ----Developer 2000 中的列表是通过设置相关属性而完成数据项的列表设置的,但那只是静态的,有时你想让某项成为动态的列表,随输入数据的改变而改变,就需要动手去编个小程序。下面详细介绍怎样去做:
  ----有块EBOP_CABLE_ACCOUNT,下有SPECIFICATION数据项,当一进入该模块时,就将SPECIFICATION项在数据库中存储的值动态显示出来,先在Form4.5中建立一个PRCEDURE,命名为DYN_LIST:
  然后在FORM的WHEN-NEW
  -FORM-INSTANCE触发子中加入一行:
  DYN_LIST;
  ----这样一进入该FMX,就会动态刷新该列表。除此之外,SPECIFICATION数据项改为列表项。
页: [1]
查看完整版本: Oracle辅导:Oracle数据库开发经验谈(1)