【发布时间】:2018-01-30 13:41:39
【问题描述】:
在我们获得的一个软件中,我们发现有一些包体的过程被定义为空。例如:
procedure execute_report(parameters) is
begin
null;
end;
尽管如此,这些程序正在通过表单使用,并且它们似乎可以正常工作。如示例所示,调用过程“execute_report”实际上会运行报告。 该过程没有在任何库中定义,甚至没有使用查询:
SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME LIKE '%EXEC%'
不会从数据库中返回任何可能被调用的内容...
有没有办法隐藏我缺少的表单、库或数据库中的代码?
【问题讨论】:
-
您检查的是表单使用的同一个数据库吗?您从哪个用户运行
ALL_OBJECTS查询?是SYSDBA账号还是普通用户?表单是否连接到同一个用户? -
@MT0 我正在使用与表单使用的用户相同的用户运行查询。不,它不是 SYSDBA。我猜想如果表单能够看到它,我应该也可以使用同一个用户。我无法通过 SYSDBA 访问,我应该为此联系 DBA。
-
一个名为“execute_report”的过程在一个包内的存在是无关紧要的 - 如果你的代码直接调用
execute_report(即没有指定包名),它会成功,那么您应该期望找到 (a) 在数据库上按该名称创建的 过程,或 (b) 它的同义词。 -
您是否检查过表单自己的过程中是否存在名为EXECUTE_REPORT的过程?您可以在 Object Navigator 的一个节点中进行检查。
-
@JeffreyKemp 我无法在问题中提到的数据库中找到该过程...您知道其他查找方法吗?
标签: sql oracle oracleforms