相关疑难解决方法(0)

如何从返回引用游标的Oracle过程中获得格式良好的结果?

在MS SQL Server中,如果我想检查存储过程的结果,我可能会在Management Studio中执行以下操作.

--SQL SERVER WAY
exec sp_GetQuestions('OMG Ponies')
Run Code Online (Sandbox Code Playgroud)

结果窗格中的输出可能如下所示.

ID    Title                                             ViewCount   Votes 
----- ------------------------------------------------- ---------- --------
2165  Indexed View vs Indexes on Table                  491         2  
5068  SQL Server equivalent to Oracle’s NULLS FIRST     524         3 
1261  Benefits Of Using SQL Ordinal Position Notation?  377         2 

(3 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

无需编写循环或PRINT语句.

要在Oracle中执行相同的操作,我可能会在SQL Developer中执行以下匿名块

--ORACLE WAY
    DECLARE
        OUTPUT  MYPACKAGE.refcur_question;
        R_OUTPUT MYPACKAGE.r_question;
        USER    VARCHAR2(20);

BEGIN

  dbms_output.enable(10000000);
  USER:= 'OMG Ponies';
  recordCount := 0;



  MYPACKAGE.GETQUESTIONS(p_OUTPUT => OUTPUT, 
  p_USER=> USER, 

  ) ;




  DBMS_OUTPUT.PUT_LINE('ID | …
Run Code Online (Sandbox Code Playgroud)

oracle oracle10g oracle-sqldeveloper

19
推荐指数
1
解决办法
2万
查看次数

执行一个在C#中返回引用游标的oracle函数

我有一个oracle包,其中包含一个带有输入引用游标的过程.我的理解是,这是非常标准的.

我不喜欢的是我必须编写大量代码才能看到输出.所以我问了这个问题,事实证明我可以通过创建一个包装程序的函数来得到我想要的东西.

更新:看起来我不再需要这个功能但是对于那些好奇的人来说可能值得知道,看看原来的问题和答案更新.

这是功能

FUNCTION GetQuestionsForPrint (user in varchar2)
  RETURN MYPACKAGE.refcur_question
AS  

    OUTPUT MYPACKAGE.refcur_question;

BEGIN 

      MYPACKAGE.GETQUESTIONS(p_OUTPUT => OUTPUT, 
      p_USER=> USER ) ;


  RETURN OUTPUT;
END;
Run Code Online (Sandbox Code Playgroud)

这就是我在SQL Developer中执行它的方法

var r refcursor;
exec :r := mypackage.getquestionsForPrint('OMG Ponies');
print r;
Run Code Online (Sandbox Code Playgroud)

所以从现在开始,我可能会将ForPrint函数添加到我的所有程序中.

这让我思考,也许功能是我想要的,我不需要程序.

为了测试这个我尝试从.NET执行该函数,除了我不能这样做.这真的是这样吗?

using (OracleConnection cnn = new OracleConnection("Data Source=Test;User Id=Test;Password=Test;"))
{
    cnn.Open();
    OracleCommand cmd = new OracleCommand("mypackage.getquestionsForPrint");
    cmd.CommandType = System.Data.CommandType.StoredProcedure;

    cmd.Parameters.Add ( "p_USER", "OMG Ponies");

    cmd.Connection = cnn;
    OracleDataReader rdr = cmd.ExecuteReader();

    while (rdr.Read())
    {
        Console.WriteLine(rdr.GetOracleValue(0));
    }

    Console.ReadLine();
} …
Run Code Online (Sandbox Code Playgroud)

c# oracle odp.net

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

oracle ×2

c# ×1

odp.net ×1

oracle-sqldeveloper ×1

oracle10g ×1