Oracle 11g - sys_refcursor

时间:2016-06-23 11:59:49

标签: oracle stored-procedures oracle-sqldeveloper sys-refcursor

我正在开发一个Oracle 11g是后端数据库的系统。 我对数据库的权限非常有限,因此我所能做的就是调用驻留在包中的程序。

从字面上看,这些过程通过类型为sys_refcursor的OUT参数返回其结果集。

我可以在C#中调用它们,并通过C#OracleDataset类型从游标中获取数据。

这是我的问题。 我希望能够运行这些过程并通过SQL Developer查看结果。 我可以正常执行该过程,但是看到sys_refcursor OUT参数的内容让我感到困惑。

我做了一些gooling,人们说关于创建类型和其他解决方案我根本没有权限来说服。

那么,我怎样才能看到sys_refcursor中包含的结果集? 所以说我有一个带有这个签名的程序....

procedure an_oracle_Proc(p_ref         IN  varchar2,
                         p_result_set  OUT sys_refcursor);

我称之为......

DECLARE
  l_ref VARCHAR2(10);
  l_result_set sys_refcursor;
BEGIN
  oracle_pkg.an_oracle_Proc(p_ref => l_ref,
                                          p_result_set => l_result_set);

  --How to select from l_result_set with limited permissions
END     

如何查看l_result_Set的内容?

3 个答案:

答案 0 :(得分:1)

这是重复我之前链接到的答案,但特别针对您的代码:

VARIABLE result_set refcursor;

DECLARE
  l_ref VARCHAR2(10);  
BEGIN
  l_ref := 'whatever';
  oracle_pkg.an_oracle_Proc(p_ref => l_ref,
                                          p_result_set => :result_set);
END;
/

PRINT result_set

...并将所有这些作为SQL工作表中的脚本运行。 ref游标的内容将显示在脚本输出窗口中。

答案 1 :(得分:0)

以为我会再看一眼,发现这一点 - 离电脑很远的地方很棒。 ;) 我只需要在左窗格中选择适当的变量。

http://www.thatjeffsmith.com/archive/2011/12/sql-developer-tip-viewing-refcursor-output/

仍然 - 编写自己的SQL来执行此操作而不是使用执行窗口会很好。

答案 2 :(得分:0)

Sys_refcursor构成一个匿名块有点棘手。使用sql-developer,浏览包或过程,右键单击并执行过程/包。

Sql-developer将打开一个输入/输出UI,您可以在其中键入值。您也可以在同一个UI上看到输出。如果您需要更多详细信息,请告诉我们。实际上我成功地在几周前调试了它。

相关问题