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;