Oracle数据库怎样抓出带有自定义函数的SQL?
在开发过程中,应该避免在SQL语句中调用自定义函数,可以通过以下SQL语句抓出调用了自定义函数的SQL。
select distinct sql_id,sql_text,module
from V$SQL,
(select object_name
from DBA_OBJECTS O
where owner = 'SCOTT'
and object_type in ('FUNCTION','PACKAGE''))
where (instr(upper(sql_text),object_name) >0)
and plsql_exec_time >0
and regexp_like(upper(sql_fulltext),'^[SELECT]')
and parsing_schema_name='SCOTT';
评论
有用 5
在开发过程中,应该避免在SQL语句中调用自定义函数。请问,为何要尽量避免,这样做的弊端是什么呢?
评论
有用 0where条件里用的function会使索引失效
select 字段里的function, 会导致SQL引擎和PL/SQL引擎的上下文切换,影响性能
评论
有用 1顶楼的方法应该是参考了落落书上的写法,方法不错,有2个小改进建议:1.可以改从v$sqlarea里面查,可以避免v$sql子游标多导致的性能问题(用instr关联,应尽量把结果集变小); 2.regexp_like只是把select开头的sql抓出来,可能还有一些sql以with as,注释等开头,还有create table,insert ,update,delete,merge 语句里面可能也会用自定义函数, 建议把regexp_like条件,改成command_type in(1,2,3,6,7,189);
评论
有用 1
墨值悬赏

