2.8避免在SQL里使用PL/SQL功能调用 对于增加PL/SQL的使用,许多用户试图利PL/SQL功能的优势产生可重复使用的代码。其中一个强迫重复使用PL/SQL功能的方法是在SQL语句里使用。例如,可以创建一个将国际货币转换为US$的函数。这个函数称为US$。示例如下: select transaction_type, US$ (amount, currency) from international_transaction where US$ (amount, currency) > 1000; 执行前面的SQL语句没有所期望的那样好。在测试时,它的性能大约比下面得出相同结果的SQL语句慢大约几十倍。 select transaction_type, amount*exchange_rate US$ from exchange_rate er, international_transaction it where er.currency = it.currency and amount*exchange_rate > 1000; 响应时间不同的原因是混合PL/SQL和SQL时,Oracle使用的机制不同。在SQL查询里嵌入PL/SQL功能时,在执行时,Oracle将调用分成两部分:用带有赋值变量的SQL语句代替功能调用以及对每一个函数调用的无名PL/SQL块。 select transaction_type, :a1 from international_transaction where :a1 > 1000 和 BEGIN :a1 := US$ (:amount, :currency); END 对在international_transaction表里的每一行,将执行在前面示例里显示的无名块两次。无名块调用导致查询响应时间的剧增。应该避免在SQL语句里使用PL/SQL功能调用。 参考文献 [1] 瓮正科,王新英著.Oracle8.X For Windows NT实用教程[M].北京:清华大学出版社,1999. [2] 萨师萱,王珊著.数据库系统概论[M]. 北京:高等教育出版社,2000.2. [3] Eyal Aronoff,Kevin Loney,Noorali Sonawalla著, 李逸波、王华驹、马赛红、曲宁等译.Oracle8性能优化和管理手册[M].北京:电子工业出版社,2000.1. [4] Peter Koletzke,Dr.Paul Dorsey著, 刘晓霞、孙登峰、曲京、何粼等译.Oracle Designer信息系统开发[M]. 北京:机械工业出版社,1999.8
上一页 [1] [2] [3]
Tags:
|