首页 新闻 会员 周边

怎么用java拿到oracle执行计划?怎么用java代码获取sql的运行时间等指标进而分析sql的性能?

0
悬赏园豆:20 [待解决问题]

如题,我想用java代码获得执行sql时的oracle执行计划,

或者怎么在java中获得sql的执行时间等指标,进而分析sql的性能?

晴心的主页 晴心 | 初学一级 | 园豆:137
提问于:2015-01-28 19:50
< >
分享
所有回答(1)
0
问天何必 | 园豆:3311 (老鸟四级) | 2015-01-29 09:26

谢谢你,但是我问的是怎么用java代码拿到,仅仅是查看执行计划我也会,但是项目中的需求是我要通过程序来获得这个执行计划。

支持(0) 反对(0) 晴心 | 园豆:137 (初学一级) | 2015-01-29 09:39

@晴心: 代码能随便拿到执行计划的话, 要安全机制干嘛呢? 

           你java只能通过连接数据库, 用sql语句返回结果集,再处理。 

支持(0) 反对(0) 问天何必 | 园豆:3311 (老鸟四级) | 2015-01-29 10:37

@问天何必: 代码拿到执行计划和安全机制有什么关系?我的项目中的需求就是这样的,我要尝试在程序中得到执行计划,然后用程序去分析执行计划。你说的java只能通过连接数据库, 用sql语句返回结果集,只能得到sql语句执行查询出的结果吧,我需要的是比如说执行时间等东西,进而分析sql的性能。

支持(0) 反对(0) 晴心 | 园豆:137 (初学一级) | 2015-01-29 10:44

@晴心:  你想要用代码直接拿到执行计划, 你可以线下去色诱勾引oracle的核心程序猿, 看他把执行计划写在硬盘上的哪个扇区, 哪个文件。  

否则, 你只能乖乖地用sql去查询出来, 只能乖乖地去试试哪些sql语句、 哪些系统表对你有用。

支持(0) 反对(0) 问天何必 | 园豆:3311 (老鸟四级) | 2015-01-29 10:59

@问天何必: 好吧,看来我们都误会彼此的意思了。我不是说我要在硬盘中的文件中读到执行计划,其实我的意思就是想要连接数据库,执行sql的方式得到执行计划的内容,但是我不知道执行哪个sql能得到,因为像SET TIMING ON 这些sql,在sql plus中执行时是可以的,但是在java代码中执行这个sql会报错选项缺失或无效,应该是不认识。所以我才问你们有没有方法得到,是我表达的有问题,应该是执行哪个sql可以得到执行计划

支持(0) 反对(0) 晴心 | 园豆:137 (初学一级) | 2015-01-29 11:47

@问天何必: 刚刚试了 EXPLAIN PLAN FOR 
SELECT * FROM SCOTT.EMP; --要解析的SQL脚本 
SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 

在java中执行这两个SQL可以得到,但是得到的结果集需要较复杂的处理才能得到数值。

支持(0) 反对(0) 晴心 | 园豆:137 (初学一级) | 2015-01-29 12:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册