2009-06-04 65 views
9

我正在使用Oracle数据库处理ASP.NET项目。我们使用TOAD来添加/管理存储过程 - 并且通常我喜欢TOAD和Oracle。我发现令人沮丧的一件事是找到一种测试Oracle存储过程的简单方法,比如SQL Server的“exec [SP_NAME] Param1,Param2,ParamN”语法。测试Oracle存储过程的最简单方法

我们所有的存储过程都输出参考游标。这里是一个存储过程的例子:

 
CREATE OR REPLACE PROCEDURE APP_DB1.GET_JOB 
(
    p_JOB_ID IN JOB.JOB_ID%type, 
    outCursor OUT MYGEN.sqlcur 
) 
IS 
BEGIN 
    OPEN outCursor FOR 
    SELECT * 
    FROM JOB 
    WHERE JOB_ID = p_JOB_ID; 
END GET_JOB; 
/

有什么建议吗?

回答

13

你只需要一个脚本调用你的存储过程,并且有一个绑定变量用于引用游标输出,以便在编辑器的TOAD网格中显示它窗口。

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

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

+0

虽然我希望能够看到一条线,这是我见过的最简单的方法。谢谢。 – Josh 2009-06-05 09:42:25

1

如果你只是在寻找一种方式来调用SP,则Oracle的方式是:

begin 
    sp_name(....); 
end; 

我不使用蟾蜍,但你应该能够把它放到SQL窗口并执行它。

+0

我更新了问题,以便您可以看到我们使用ref游标进行输出。因此,我们不能使用上面的示例。 – Josh 2009-06-04 19:57:17

1

在sqplus您可以使用语法

SQL> VAR RC REFCURSOR

SQL> EXEC APP_DB1.GET_JOB(你要查询的作业ID:RC)

SQL>打印RC

这应该做到这一点。第一行定义了一个绑定变量。你也可以为作业ID定义一个变量,或者直接键入它。

+0

我需要网格中的结果集,比如SQL Server,所以我正在寻找一种在TOAD中做的方法。 – Josh 2009-06-04 22:27:59

0

TOAD通过Russel的示例脚本将结果显示在网格中。以脚本运行。

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

谢谢!