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

Oracle Sql クエリ内から SQL 変数の値を .NET コードに戻す

    ODP.NET を使用する必要があります。 (オラクルの Oracle データ アクセス コンポーネント):

    この例を以下に示します。 ODP.NETでは、実行中のプロシージャまたは文のパラメータに対応するパラメータの方向(入力、入力出力、出力、戻り値)を確立できることに注意してください。この例では、戻り値を取得しています。これは、シーケンスとトリガーを介してデータベースによって生成される ID です (.NET アプリに関する限り、自動的に作成されます)。

    int event_id =0;using (OracleConnection oraConn =new OracleConnection(connStr)){ string cmdText =@"insert into EVENT (EVENT_NAME, EVENT_DESC) values (:EVENT_NAME, :EVENT_DESC) RETURNING EVENT_ID INTO :EVENT_ID "; using (OracleCommand cmd =new OracleCommand(cmdText, oraConn)) { oraConn.Open(); OracleTransaction trans =oraConn.BeginTransaction(); { OracleParameter prm =new OracleParameter(); を試してください。 cmd.BindByName =true; prm =new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); prm.Value ="SOME NAME"; cmd.Parameters.Add(prm); prm =new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); prm.Value ="SOME DESC"; cmd.Parameters.Add(prm); prm =new OracleParameter( "EVENT_ID" , OracleDbType.Int32 , ParameterDirection.ReturnValue); cmd.Parameters.Add(prm); cmd.ExecuteNonQuery(); trans.Commit(); // 戻り値 event_id =ConvertFromDB(cmd.Parameters["EVENT_ID"].Value); } キャッチ { trans.Rollback();投げる; } 最後に { trans.Dispose(); oraConn.Close(); }}   

    ConvertFromDB は、戻り値を同等の .NET (この場合は int) にキャストするジェネリックにすぎません。

    お役に立てば幸いです。

    編集:

    ODP.NET では、値の配列を簡単にバインド (および戻り値の配列を取得) できます。

    using (OracleConnection oraConn =new OracleConnection(connStr)){ string cmdText =@"insert into TEST_EVENT (EVENT_NAME, EVENT_DESC) values (:EVENT_NAME, :EVENT_DESC) RETURNING EVENT_ID INTO :EVENT_ID "; using (OracleCommand cmd =new OracleCommand(cmdText, oraConn)) { oraConn.Open(); OracleTransaction trans =oraConn.BeginTransaction(); { string[] event_names =new string[2]; を試してください。 string[] event_descs =新しい string[2]; int[] event_ids =新しい int[2]; event_names[0] ="イベント1"; event_descs[0] ="Desc1"; event_names[1] ="イベント 2"; event_descs[1] ="Desc2"; OracleParameter prm =new OracleParameter(); cmd.Parameters.Clear(); cmd.ArrayBindCount =2; cmd.BindByName =true; prm =new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); prm.Value =event_names; cmd.Parameters.Add(prm); prm =new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); prm.Value =event_descs; cmd.Parameters.Add(prm); prm =new OracleParameter( "EVENT_ID" , OracleDbType.Int32 , ParameterDirection.ReturnValue); cmd.Parameters.Add(prm); cmd.ExecuteNonQuery(); trans.Commit(); // 戻り値を取得 event_ids =(int[])(cmd.Parameters["EVENT_ID"].Value); } キャッチ { trans.Rollback();投げる; } 最後に { trans.Dispose(); oraConn.Close(); }}  


    1. MySQLデータベースのタイムゾーンをGMTに設定します

    2. 1つのクエリで複数の行を更新しますか?

    3. SUM(users_count)が1000に達するまで選択するSQLクエリ

    4. SELECTで配列を作成します