0

我们正在创建一个在 PL/SQL 中执行受限版本软件时使用的函数和过程的列表。虽然我们的过程很慢,但我们希望找到一种更快的方法来查找在给定函数或过程的代码中进行的函数或过程调用。在这篇文章中,函数和过程这两个词可以互换使用……

我们目前的流程:

1) 使用 regexp_substr 获取表中给定函数的函数源代码:

l_function_source := REGEXP_SUBSTR(FUNCTION|PROCEDURE)(\s)+'|| i_function_name ||'(\s|\()+(.)+END(\s)+'|| i_function_name||'(\s)*(;)'

2) 对于函数源的每个单词(慢!),我们查找“外部”函数调用(例如 package_name.function_name(param1,param2..)),删除它们,然后扫描本地函数调用(例如 function_name(param1 ,param2..))。每次我们找到一个新的函数/过程,我们将它添加到一个函数名表中。

理想情况下,我想获得每个函数的依赖项列表,就像你做一个表一样。例如:

SELECT referenced_name 
FROM USER_DEPENDENCIES 
WHERE TYPE IN ('FUNCTION','PROCEDURE') 
AND NAME = i_function_name ;

这样我们就可以遍历列表,查询每个函数/过程名称并将它们的依赖项添加到列表中,而不必依赖正则表达式并遍历每个单词。可悲的是,这似乎不存在。任何建议或意见将不胜感激。

4

0 回答 0