服务器 频道

Oracle 使用技巧

    【IT168 服务器学院】
   提高表连接的查询速度
    在表连接查询时,常常用下列查询方法查询数据是:
SELECT  RECORDNO,NAME,AGE
FROM  表1
WHERE 表1.RECORDNO NOT IN
   (SELECT RECORDNO
    FROM 表2
    WHERE  BIRTHDAY=''710618'');
笔者发现,如果表1的长度为6000条记录,表2的长度为1000条记录, 则要4分钟才能出结果。原因是使用了比较运算符 NOT IN ,它的逻辑测试速度是最慢的。利用外连接替换NOT IN 运算符,查询时间则缩短为50秒。修改方法如下:
SELECT  RECORDNO,NAME,AGE
FROM  表1,表2
WHERE 表1.RECORDNO=表2.RECORDNO(+)
AND  表2.RECORDNO IS NULL
AND  表2.BIRTHDAY(+)=''710618'';

    利用用库模块实现模块资源共享
    在编程中很多FROM 模块需要共用一个程序单元。ORACLE FORM 4.5提出了库模块的概念。使用库模块建立共享程序单元库,既减少了磁盘占用空间,又增加程序的可维护性。使用库模块共享程序单元的过程是:点击系统菜单的file-new-liberary选项,建立一库模块,在program units节点下增加一程序单元, 写入需共享程序的单元编码, 编译后存盘。当FORM模块需共享时,在模块的Attached Libraries节点下连接库模块(此时屏幕会提示是否要删除路径,用户选择NO)。这样,用户便可在FORM模块中直接使用共享程序单元了。 

    利用用库模块实现模块资源共享
    在编程中很多FROM 模块需要共用一个程序单元。ORACLE FORM 4.5提出了库模块的概念。使用库模块建立共享程序单元库,既减少了磁盘占用空间,又增加程序的可维护性。使用库模块共享程序单元的过程是:点击系统菜单的file-new-liberary选项,建立一库模块,在program units节点下增加一程序单元, 写入需共享程序的单元编码, 编译后存盘。当FORM模块需共享时,在模块的Attached Libraries节点下连接库模块(此时屏幕会提示是否要删除路径,用户选择NO)。这样,用户便可在FORM模块中直接使用共享程序单元了。
 
    用FORMS 实 现ORACLE 数 据 库 与 其 它 数 据 源 数 据 的 交 换
    ---- Developer/2000 不 能 实 现 同 时 多 数 据 源 的 同 时 连 接, 在 多 系 统 和 异 种 数 据 源 的 操 作 中 功 能 确 实 大 打 折 扣, 虽 然 可 以 用3GL 加ODBC 作 一DLL 应 用 能 实 现, 但 一 般 的 应 用 中 又 有 点 没 用 必 要 作 的 那 么 复 杂。 实 际 上Developer/2000 内 嵌 包TEXT_IO 为 我 们 提 供 了 一 个 更 简 单 的 方 法。 几 乎 所 有 的 数 据 库 或 数 据 库 前 端 开 发 工 具 都 提 供 文 本 文 件 的 操 作, 这 样 我 们 完 全 可 以 用 文 本 文 件 作 为 数 据 交 换 的 通 用 格 式。 下 例 是 在 保 险 业 中 的 一 应 用:( 要 用 到d2kwfile.dll 应 用)
DECLARE
 filename varchar2(128):=null;
 filenum text_io.file_type;
 linebuf varchar2(100);
 r_temp  temp%rowtype;
BEGIN
 filename:=d2k_file_dialog.show
(''请选择缴费工资台帐原文件'',''c:\'',''源文件(*.txt)|*.txt|'');
  if filename is null then
   raise form_trigger_failure; end if;
  filenum:=text_io.fopen(filename,''r'');
  loop
    BEGIN
      text_io.get_line(filenum,linebuf);
      TEXT_IO.PUT(linebuf);TEXT_IO.NEW_LINE;
      exception when no_data_found then
      exit;
    END;
    BEGIN
    v_temp.l1=substr(linebuf,1,9);
    v_temp.l2:= to_number(substr(linebuf,10,5));
    insert into temp(l1,l2) values (v_temp.l1,v_temp.l2);
      exception when others then
    END;
 < < end_loop > >
  null;  
  end loop;
END;

0
相关文章