//事先產生暫存資料表 create global temporary table temp_20061030 (id int,name varchar2(256)) on commit delete rows;
OracleDBOperation dbo = null;//OracleDBOperation為對Oracle操作封裝的自訂的類。各位可以用Oracle內建的操作類和方法。此處只是說明處理方法。
OracleTransaction trans = null;//關鍵第一步
try
{
dbo = new OracleDBOperation();//執行個體化並串連資料庫
trans=dbo.Connection.BeginTransaction();//關鍵第二步
/*--正常利用暫存資料表的業務處理開始--*/
string sql="insert into temp_20061030 (id,name) select t.id,t.name from table1 t where t.id<1000";
dbo.ExecuteStatement(sql);
sql="select max(id) id,count(*) cnt from temp_20061030";
DataTable dt = dbo.GetTable(sql);
if(dt.Rows.Count>0)
{
string id=dt.Rows[0]["id"].ToString();
string cnt=dt.Rows[0]["cnt"].ToString();
MessageBox.Show(id+"/"+cnt);
}
else{
throw new Exception("沒有資料");
}
/*--正常利用暫存資料表的業務處理結束--*/
trans.Commit();//關鍵第三步
}
catch(Exception ex)
{
/*--釋放也很重要--*/
if(trans!=null){
trans.Rollback();
}
MessageBox.Show(ex.Message);
}
finally{
/*--釋放也很重要--*/
if(trans!=null){
trans.Dispose();
trans=null;
}
if(dbo!=null){
dbo.Close();
dbo.Dispose();
dbo=null;
}
}
暫存資料表在事務內有效時,事務Commit或Rollback都會清空暫存資料表。