ORACLE 数据库开发经验总结(一)
---- ORACLE 数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大份额,其强大而完善的数据库管理功能,以及 ORACLE 公司推陈出新的不断努力,一直成为 IT 业界瞩目
<script src="http://www.pcdog.com/tech/js/Ads.js" type="text/javascript"></script> |
---- 一 . 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 。