私はカスケードでストアドプロシージャを実行しようとすると困っています。私はいくつかの助けが必要です。シナリオを見てみましょう:C#Oracle - 順番にストアドプロシージャを実行
私は父のテーブルを持って、私はOracleのSPを実行する方法を知っているが、私はドントのは、C#から今すぐ「REQUEST」と子テーブル、「REQUEST_DETAILS」
それを呼びましょうチェーンの中で2つを実行する方法を知っている、すべての終わりまでコミットせずに。
私は最初のストアドプロシージャがREQUESTデータと第2の1を挿入しますREQUEST.IDと子供のデータを挿入するために開始するために生成されたREQUEST.IDを取得し、父・テーブル・データを挿入した後する必要が
REQUEST_DETAILデータを挿入しますが、何か問題が生じた場合は、すべてのトランザクションをロールバックします。
簡単な方法でこれを行う方法がありますか?
ここに私のコードがあります。
public Bool SaveRequest(Request newRequestData)
{
var connection = new connection();
bool isSuccess = true;
OracleConnection Conn = connection._GetInstance();
OracleCommand Cmd = new OracleCommand();
Conn.Open();
Cmd.Connection = Conn;
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.CommandText = "PackageRequests.InsertNewRequest";
Cmd.BindByName = true;
//IN PARAM
Cmd.Parameters.Add(new OracleParameter("P_LOCATION", OracleDbType.Varchar2, newRequestData.location, ParameterDirection.Input));
Cmd.Parameters.Add(new OracleParameter("P_PCSTOTAL", OracleDbType.Int32, newRequestData.pcsTotal, ParameterDirection.Input));
Cmd.Parameters.Add(new OracleParameter("P_STATUS", OracleDbType.Int32, newRequestData.status, ParameterDirection.Input));
//Out Param
Cmd.Parameters.Add(new OracleParameter("P_NEW_ID", OracleDbType.Int32)).Direction = ParameterDirection.Output;
OracleTransaction transaction = Conn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
Cmd.ExecuteNonQuery();
//New request_id
string newId = Convert.ToString(Cmd.Parameters["P_NEW_ID"].Value);
//Here I think goes the logic for execute the another procedure that will insert the data into REQUEST_DETAIL
/***
foreach(var item in newRequestData.List)
{
//Insert request_detail_Data()
}
***/
//after all -- transaction.Commit();
}
catch (OracleException ex)
{
//If something goes wrong rollback.
transaction.Rollback();
isSuccess = false;
}
finally
{
Conn.Close();
}
return isSuccess;
}
挿入ストアドプロシージャには、データベースの最後に「コミット」が必要です。また、コードを編集して、追加のストアドプロシージャを呼び出す場所を表示できますか?別のパッケージを作成するか、Oracle側から追加のInsert文を追加できますか?これは、これをより効果的にするために、いくつかの異なる方法で行うことができます。 – MethodMan