测试 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 存储过程的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章