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

C#から出力パラメータとして参照カーソルを使用してOracle関数を呼び出す方法は?

    あなたは確かにできます。注意すべきいくつかの落とし穴がありますが、ここにテストケースがあります

    create or replace function testodpRefCursor(
                      uniqueId    IN NUMBER 
                     ,resultItems OUT NOCOPY SYS_REFCURSOR) RETURN NUMBER
                     IS
    
     BEGIN
          OPEN resultItems for select level from dual  connect by level < uniqueId ;
          return 1;
     END testodpRefCursor;
    
    1. 関数は、ReturnValueを最初のとして持つのが好きだとわかりました。 コレクションのパラミン
    2. BindByNameはデフォルトでFALSEであるため、デフォルトでBIND BY POSITION
    3. になります。

    それ以外の場合は非常に簡単です:

      OracleCommand cmd = new OracleCommand("TESTODPREFCURSOR", con);
      cmd.CommandType   = CommandType.StoredProcedure;
      cmd.BindByName = true;
      // Bind 
    
    
      OracleParameter oparam = cmd.Parameters.Add("ReturnValue", OracleDbType.Int64);
      oparam.Direction = ParameterDirection.ReturnValue ;       
    
      OracleParameter oparam0 = cmd.Parameters.Add("uniqueId", OracleDbType.Int64);
      oparam0.Value = 5 ;
      oparam0.Direction = ParameterDirection.Input;
    
      OracleParameter oparam1 = cmd.Parameters.Add("resultItems", OracleDbType.RefCursor);
      oparam1.Direction = ParameterDirection.Output;
    
    
    
    
      // Execute command
      OracleDataReader reader;
      try
      {
        reader = cmd.ExecuteReader();
    
        while(reader.Read() ){
            Console.WriteLine("level: {0}", reader.GetDecimal(0));  
        }
    
      } ...
    

    その他のサンプルについては、Oracleホームディレクトリに移動し、ODP.NETのRefカーソルサンプルを参照してください

    例:%oracle client home%\ odp.net \ samples \ 4 \ RefCursor

    hth




    1. PDOを使用した行数

    2. Bcryptハッシュパスワードをデータベースに保存するためにどの列タイプ/長さを使用する必要がありますか?

    3. MySQLとMariaDBの6つの一般的な障害シナリオ、およびそれらを修正する方法

    4. TSQL:複数のデータベースにアクセスするビューを作成する