游标一般都是在执行sql语句,我不知道你指的是这个sql语句比较慢,还是单纯的游标速度慢。sql语句慢可以根据使用改写sql语句的写法,建立索引,建立分区等优化手段来解决。单纯游标速度慢,可以考略批量执行bulk collect这种方式提取数据使用forall 替代for 循环也可以提升效率。以下是我总结的plsql调优的重点,你可以参考一下:1. 尽早退出循环2. static的变量尽量放在循环的外层3. 因为and 和or 只要判断左边的表达式为真即可推出 逻辑判断 所以将容易出现true的逻辑表达式放在左边,这样可以省下处理的时间4. if else 和case when 同上5. 尽量使用迭代,而不是递归,因为调用存储过程或者函数,会开辟另外的内存空间6. 通常函数都是值传递,即传参数的时候会copy参数的值到子程序中对于数据量比较大的参数可以使用in out nocopy 指定引用传递,可以节省大量时间7. 可以使用关联数组,较少查找集合中元素的时间关联数组index by varchar2(xx) 类似于map,会省下很集合操作,以及时间。8. 对于cpu密集型的plsql,可以使用native 本地编译的特性alter xxx compile plsql_code_type=native ;9. 经常使用的子程序可以使用inline函数内嵌到主程序中pragma inline($FUNCTION_NAME,'yes') ;重载的程序只要拥有相同的名称都会被内嵌到program unit中plsql_optimize_level=2的时候需要声明inline使用内联plsql_optimize_level=3的编译的时候会自动的做这部分工作。不需要自己执行inline操作。可以使用PRAGMA INLINE (p1, 'NO');禁止内联当level=3的时候声明了inline会给予这个子程序更高的inline的优先级。下面的语句中(1)PRAGMA INLINE (p1, 'YES');(2)PRAGMA INLINE (p1, 'NO');(3)PRAGMA INLINE (p1, 'YES');第二行会覆盖第一行以及第三行,也就是说program unit 中奖不使用内联10. 大量数字操作的时候可以使用java存储过程11. 使用result cache功能 缓存经过计算得到的结果 relies_on($TB_NAME)指定当表tb_name的数据改变时,结果集缓存失效12. 使用update of $COLUMN_NAME on $TB_NAME for each rowwhen (new.xx>1000)可以省下需要处理时间最好都使用after 触发器,before可能会有锁定的问题