我们正在创建一个在PL / SQL中执行软件限制版本时使用的函数和过程列表。我们的过程很慢,我们希望找到一种更快的方法来查找在给定函数或过程代码中进行的函数或过程调用。在这篇文章中,单词函数和过程可以互换使用......
我们目前的流程:
1)使用regexp_substr:
获取表中给定函数的函数源代码l_function_source := REGEXP_SUBSTR(FUNCTION|PROCEDURE)(\s)+'|| i_function_name ||'(\s|\()+(.)+END(\s)+'|| i_function_name||'(\s)*(;)'
2)对于功能源的每个单词(慢度!),我们寻找' foreign'函数调用(例如package_name.function_name(param1,param2 ..)),删除它们,然后扫描本地函数调用(例如function_name(param1,param2 ..))。每次我们找到一个新的函数/过程时,我们都会将它添加到函数名称表中。
理想情况下,我想获得每个函数的依赖项列表,就像你做一个表一样。 E.g:
SELECT referenced_name
FROM USER_DEPENDENCIES
WHERE TYPE IN ('FUNCTION','PROCEDURE')
AND NAME = i_function_name ;
这样我们就可以遍历列表,查询每个函数/过程名称并将它们的依赖项添加到列表中,而不必依赖于正则表达式并循环遍历每个单词。可悲的是,这似乎并不存在。任何建议或意见都将受到高度赞赏。
铁