如何在 Oracle SQL 开发人员中查看/执行授予的存储过程

Posted

技术标签:

【中文标题】如何在 Oracle SQL 开发人员中查看/执行授予的存储过程【英文标题】:How to view/execute granted stored procedure in Oracle SQL developer 【发布时间】:2019-01-04 11:13:59 【问题描述】:

我用来访问特定数据库的用户已被授予另一个用户管理的存储过程的 EXECUTE 权限。有没有办法像常规存储过程一样在 Oracle SQL 开发人员中查看或运行该存储过程?目前我在“程序”选项卡中看不到它,连接到右键单击并运行。我正在 java 中执行存储过程,但我需要能够在 SQL 开发人员中对其进行测试。

【问题讨论】:

是的,如果您知道“原始”模式名称是什么,您可以。只需输入 schemaowner.procedurename @OracleDev:干杯。我想我希望它会更新我的存储过程列表。 Stored proc 有 IN 和 OUT,在 SQL developer 中使用 run 函数更容易。 查看 Alex Poole 的回答 :) 【参考方案1】:

该过程不会立即出现在您的连接下的树列表中,因为这些只是您连接的用户自己拥有的那些。 (如果您右键单击并选择“过滤器”,则可以选择“覆盖模式过滤器”,但即使设置了过滤器并设置了该标志,您也看不到其他用户的过程。)

但是在您的连接下的对象类型列表的底部是一个“其他用户”条目。如果您展开它,找到程序的所有者并展开它,然后展开 that 用户下的程序列表 - 您将看到您的所有 他们的 程序有权查看/执行。

然后您可以从那里运行它,就像运行您自己的程序一样。

您也可以右键单击您的连接并选择“架构浏览器”;然后在出现的选项卡中,您可以更轻松地更改用户,并将对象类型更改为“程序”。您可能会发现这比在树中导航要快。

@thatjeffsmith 有 a post about navigating via the tree or the dropdowns(当然 - 应该是他们的第一个...)

【讨论】:

干杯,授予者中的存储过程已更新,这并未反映在我假设的旧版本的“其他用户”存储过程中。需要做什么来级联更改? 不太清楚你的意思,你应该总是看到当前的代码。如果您在会话中打开该过程,然后它已更新,您可能只需要关闭并重新打开它。或者您可以右键单击并刷新列表。 不,它没有更新到新版本。 proc 开头的注释包含更新的详细信息,因此很容易跟踪更改。你知道改变向下反映的任何原因吗?这就是为什么 java 代码被破坏的原因,因为旧版本的 IN 参数比新版本多 你确定更新的版本真的已经编译了吗?并且在您期望的架构(和数据库)中?如果 Java 调用也遇到旧版本,那么这就是它正在使用的数据库/模式中实际存在的内容。您可以查询all_objects查看last_ddl_time,查询all_source查看当前代码;但这也是 SQL Developer 所关注的。 检查程序的信息页面和 LAST_DDL_TIME - 顺便说一句,我们不缓存该页面,我们向您展示数据库对于程序源的内容。您可以打开视图 - 日志 - 语句面板并查看我们用于自己填充代码编辑器的 sql【参考方案2】:

如果你的 shema 中有一个过程“test_procedure”,你会像这样执行它:

begin
  test_procedure;
end;

如果你有它在另一个模式中,让我们说“父”,那么你可以这样称呼它:

begin
  parent.test_procedure;
end;

【讨论】:

以上是关于如何在 Oracle SQL 开发人员中查看/执行授予的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何查看Oracle中sql语句的执行时间

如何在 oracle SQL 开发人员的对象关系数据库功能中定义表之间的对象引用

如何将 SQL 开发人员/Toad 连接到 Oracle 8i

在Oracle中启用AutoTrace查看SQL执行计划

如何在 SQuirrel SQL 中查看 Oracle 执行计划?

如何查看oracle服务器上正在执行的SQL语句