测试 Oracle 存储过程的最简单方法

Posted

技术标签:

【中文标题】测试 Oracle 存储过程的最简单方法【英文标题】:Easiest method to test an Oracle Stored Procedure 【发布时间】:2009-06-04 19:36:46 【问题描述】:

我正在开发一个带有 Oracle 数据库的 ASP.NET 项目。我们使用 TOAD 来添加/管理存储过程——总的来说,我喜欢 TOAD 和 Oracle。我发现令人沮丧的一件事是找到一种简单的方法来测试 Oracle 存储过程,例如 SQL Server 的“exec [SP_NAME] Param1、Param2、ParamN”语法。

我们所有的存储过程都输出 Ref Cursors。这是一个存储过程的例子:

创建或替换过程 APP_DB1.GET_JOB ( p_JOB_ID IN JOB.JOB_ID%type, outCursor OUT MYGEN.sqlcur ) 是 开始 OPEN outCursor FOR 选择 * 从工作 WHERE JOB_ID = p_JOB_ID; 结束 GET_JOB; /

有什么建议吗?

【问题讨论】:

【参考方案1】:

您只需要一个脚本来调用您的存储过程,并为引用光标输出提供一个绑定变量,以便在编辑器窗口的 TOAD 网格中显示它。

DECLARE
 type result_set is ref cursor; 
BEGIN
 APP_DB1.GET_JOB(1, :result_set);
END;

当您随后运行此 TOAD 时会提示您“绑定”:result_set,只需从类型列表中选择 ref cursor,然后结果将显示在网格中。诀窍是将自己视为调用存储过程的“客户端”,并且需要自己的引用游标来存储结果。

【讨论】:

虽然我希望有一个单行语句,但这是我见过的最简单的方法。谢谢。 这个技巧对我很有帮助。谢谢!【参考方案2】:

如果你只是寻找调用SP的方式,那么Oracle方式是:

begin
  sp_name(....);
end;

我不使用 Toad,但您应该可以将其放入 SQL 窗口并执行。

【讨论】:

我更新了问题,以便您可以看到我们使用参考游标进行输出。因此,我们不能使用您上面的示例。【参考方案3】:

在 sqplus 中你可以使用语法

SQL>var rc refcursor

SQL>exec APP_DB1.GET_JOB(你要查询的job id,:rc)

SQL>打印 rc

应该这样做。第一行定义了一个绑定变量。您还可以为作业 ID 定义一个变量,或者直接输入它。

【讨论】:

我需要网格中的结果集,比如 SQL Server,所以我正在寻找一种在 TOAD 中执行的方法。【参考方案4】:

TOAD 使用 Russel 的示例脚本以网格形式显示结果。作为脚本运行。

variable  P_CUR refcursor;
exec  PACK.GETEXECUTION ( '9f363e49-88c1-4295-b61e-60812d620d7e', '6', :P_CUR );
print P_CUR;

谢谢!

【讨论】:

以上是关于测试 Oracle 存储过程的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

测试数据库与存储过程支持一起使用

oracle调试存储过程

oracle 存储过程赋值的方法

SQL Server的存储过程怎么写?

oracle 存储过程(分析理解)

oracle存储过程 调用变量