网友分享:Oracle数据库开发技术经验浅谈
一. ORACLE SQL PLUS 使用技巧:
----①查找重复记录:
[pre]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);
[/pre]
----执行上述SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录。
----删除重复记录:
[pre]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);
[/pre]
----执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录。
----② 快速编译所有视图
----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。
[pre]SQL >SPOOL ON.SQL
SQL >SELECT ‘ALTER VIEW ‘||TNAME||’COMPILE;’ FROM TAB;
SQL >SPOOL OFF
[/pre]
然后执行ON.SQL即可。SQL >@ON.SQL
当然,授权和创建同义词也可以快速进行,如:
[pre]SQL >SELECT ‘GRANT SELECT ON ’
||TNAME||’ TO USERNAME;’ FROM TAB;
SQL >SELECT ‘CREATE SYNONYM
‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;
[/pre]
③ 用外联接提高表连接的查询速度
在作表连接(常用于视图)时,常使用以下方法来查询数据:
[pre]SELECT PAY_NO, PROJECT_NAME
FROM A
WHERE A.PAY_NO NOT IN (SELECT PAY_
NO FROM B WHERE VALUE >=120000);
[/pre]
----但是若表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. 在此触发器中写如下代码:
[pre]set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
SYSTEM 欢迎使用');
[/pre]