ORACLE 数据库开发经验总结1

本文分享了Oracle数据库开发的经验,包括SQL Plus使用技巧、快速编译视图、提高表连接查询速度的方法、读写文本文件以及在触发器中使用新旧值等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORACLE 数据库开发经验总结(一)

---- 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 分左右的时间 :

SELECT PAY_NO,PROJECT_NAME

FROM A,B

WHERE A.PAY_NO=B.PAY_NO(+)

AND B.PAY_NO IS NULL

AND B.VALUE >=12000;

---- ④ 怎样读写文本型操作系统文件

---- 在 PL/SQL 3.3 以上的版本中, UTL_FILE 包允许用户通过 PL/SQL 读写操作系统文件。如下:

DECALRE

FILE_HANDLE UTL_FILE.FILE_TYPE;

BEGIN

FILE_HANDLE:=UTL_FILE.FOPEN(

‘ C:/','TEST.TXT','A');

UTL_FILE.PUT_LINE(FILE_HANDLE,'

HELLO,IT'S A TEST TXT FILE');

UTL_FILE.FCLOSE(FILE_HANDLE);

END;

---- 相关 UTL_FILE 数据库包详细信息可以参见相关资料。

---- ⑤ 怎样在数据库触发器中使用列的新值与旧值

---- 在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改前的值,使用 :OLD 就可以了,使用某列修改后的新值,用 :NEW 就可以了。如 :OLD.DEPT_NO,:NEW.DEPT_NO 。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值