sql >> データベース >  >> RDS >> Oracle

Oracle関数からRefCursorを返す方法は?

    sqlCom.ExecuteNonQuery();が欠落していると思います

    また、 select func_test(7)from dual;を実行する代わりに 関数を実行してパラメータを渡すように切り替えましょう

      OracleConnection oracleCon = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
    
    
      // Set the command
    
      string anonymous_block = "begin " +
                                  "  :refcursor1 := func_test(7) ;" +
                                  "end;";  
     //fill in your function and variables via the above example
      OracleCommand sqlCom= con.CreateCommand();
      sqlCom.CommandText = anonymous_block;
    
      // Bind 
      sqlCom.Parameters.Add("refcursor1", OracleDbType.RefCursor);
      sqlCom.Parameters[0].Direction = ParameterDirection.ReturnValue;
    
      try 
      {
        // Execute command; Have the parameters populated
        sqlCom.ExecuteNonQuery();
    
        // Create the OracleDataAdapter
        OracleDataAdapter da = new OracleDataAdapter(sqlCom);
    
        // Populate a DataSet with refcursor1.
        DataSet ds = new DataSet();
        da.Fill(ds, "refcursor1", (OracleRefCursor)(sqlCom.Parameters["refcursor1"].Value));
    
        // Print out the field count the REF Cursor
        Console.WriteLine("Field count: " + ds.Tables["refcursor1"].Columns.Count);
      }
      catch (Exception e)
      {
        Console.WriteLine("Error: {0}", e.Message);
      }
      finally
      {
        // Dispose OracleCommand object
        cmd.Dispose();
    
        // Close and Dispose OracleConnection object
        con.Close();
        con.Dispose();}
    

    これは、@%ora_home%\ Client_1 \ ODP.NET \ samples \ RefCursor \ Sample5.csproj

    にあるODPの例に基づいています。

    proc / function呼び出しごとにカスタムビルドされたparamコレクションを(良くも悪くも!)避けたい場合は、コードで匿名ブロックを利用することでそれを回避できます。上記のコードを修正しました(もう一度テストしていません!)。この手法。これは、この手法を示す(Mark Williams以外の)すばらしいブログです。http://oradim.blogspot.com/2007/04/odpnet-tip-anonymous-plsql-and.html




    1. Hadoopとビッグデータの概要

    2. Oracle Database 12cの作成–ステップバイステップ

    3. PostgreSQLでピボットテーブルを作成する

    4. OracleでCoalesce関数を使用する方法