最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle 臨時(shí)表 OracleDataAdapter 批量更新的實(shí)現(xiàn)思路

 更新時(shí)間:2024年07月04日 09:09:50   作者:後生哥哥  
這篇文章主要介紹了Oracle 臨時(shí)表 OracleDataAdapter 批量更新的實(shí)現(xiàn)思路,實(shí)現(xiàn)代碼需要注意字段名必需大小寫一致,需要的朋友可以參考下

Oracle 臨時(shí)表 OracleDataAdapter 批量更新

/// <summary>
        /// 注意,字段名必需大小寫保持一致
        /// </summary>
        protected static string updateSql = @"
Merge into Table_Name  T 
Using TempTable  S 
ON (T.USER_ID = S.USERID )
WHEN MATCHED 
THEN UPDATE SET T.NICK_NAME = S.NICKNAME,T.PHONENUMBER = S.PHONENUMBER ,T.AVATAR = S.AVATAR,T.JOB = S.JOB
";
        protected static string crateTemplateSql = @"
declare tableExistedCount number;   --聲明變量存儲(chǔ)要查詢的表是否存在
 p_sql varchar(200);
Begin
     select count(1) into tableExistedCount  from user_tables t where t.table_name = upper('TempTable'); --從系統(tǒng)表中查詢當(dāng)表是否存在
DBMS_OUTPUT.PUT_LINE(tableExistedCount);
     if tableExistedCount  >0 then --如果不存在,使用快速執(zhí)行語句創(chuàng)建新表
     DBMS_OUTPUT.PUT_LINE('刪除舊表');
     for r in (select a.table_name from user_tables a where a.table_name =upper('TempTable')) loop
      p_sql:='TRUNCATE TABLE '||r.table_name;
      DBMS_OUTPUT.PUT_LINE(p_sql);
      execute immediate p_sql;
      p_sql:='drop table '||r.table_name;
      DBMS_OUTPUT.PUT_LINE(p_sql);
      execute immediate p_sql;
      end Loop;
     end if;
     execute Immediate
         '
        create global temporary table TempTable (
          userId Varchar(255),
          nickName Varchar(255) NULL,
          phonenumber Varchar(255) NULL,
          avatar Varchar(255) NULL,
          job Varchar(255) NULL
        )
         on commit delete  rows
 ';
end;";
        /// <summary>
        /// SqlBulkCopy 批量更新數(shù)據(jù)
        /// </summary>
        /// <param name="dataTable">數(shù)據(jù)集</param>
        /// <param name="crateTemplateSql">臨時(shí)表創(chuàng)建字段</param>
        /// <param name="updateSql">更新語句</param>
        public static void BulkUpdateData(DataTable dataTable, string crateTemplateSql, string updateSql)
        {
            using (var conn = new Oracle.ManagedDataAccess.Client.OracleConnection(ConfigurationManager.ConnectionStrings["dbCon"].ConnectionString))
            {
                OracleTransaction trans = null;//關(guān)鍵第一步
                using (var command = new Oracle.ManagedDataAccess.Client.OracleCommand("", conn))
                {
                    try
                    {
                        conn.Open();
                        trans = conn.BeginTransaction();
                        //數(shù)據(jù)庫并創(chuàng)建一個(gè)臨時(shí)表來保存數(shù)據(jù)表的數(shù)據(jù)
                        command.CommandText = crateTemplateSql;
                        command.ExecuteNonQuery();
                        OracleCommand selectCmd=conn.CreateCommand();
                        //查詢表頭
                        selectCmd.CommandText = "select userId,nickName,phonenumber,avatar,job from TempTable where rownum=0";
                        OracleDataAdapter myDataAdapter = new OracleDataAdapter(selectCmd);
                        DataTable data = new DataTable();
                        myDataAdapter.Fill(data);
                        foreach (DataRow row in dataTable.Rows) {
                            DataRow newRow = data.NewRow();
                            newRow["userId"] = row["userId"];
                            newRow["nickName"] = row["nickName"];
                            newRow["phonenumber"] = row["phonenumber"];
                            newRow["avatar"] = row["avatar"];
                            newRow["job"] = row["job"];
                            data.Rows.Add(newRow);
                        }
                        //插入語句
                        myDataAdapter.InsertCommand=new OracleCommand("insert into TempTable(userId,nickName,phonenumber,avatar,job) values(:userId,:nickName,:phonenumber,:avatar,:job)", conn);
                        OracleCommandBuilder custCB = new OracleCommandBuilder(myDataAdapter);
                        custCB.ConflictOption = ConflictOption.OverwriteChanges;
                        custCB.SetAllValues = true;
                        foreach (DataColumn c in dataTable.Columns)
                        {
                            OracleParameter oraParameter = new OracleParameter(c.ColumnName, OracleDbType.Varchar2);
                            oraParameter.SourceColumn = c.ColumnName;
                            oraParameter.SourceVersion = DataRowVersion.Current;
                            myDataAdapter.InsertCommand.Parameters.Add(oraParameter);
                        }
                        int count = myDataAdapter.Update(dataTable);
                        dataTable.AcceptChanges();
                        myDataAdapter.Dispose();
                        /*
                        var cmd = new OracleCommand("select count(*) from transaction_temp_tb_lz2 --where user_Id in('615896266','602185346') ", conn);
                        var obj = cmd.ExecuteScalar();
                        */
                        // 執(zhí)行Command命令 使用臨時(shí)表的數(shù)據(jù)去更新目標(biāo)表中的數(shù)據(jù)  然后刪除臨時(shí)表
                        command.CommandTimeout = 300;
                        command.CommandText = updateSql;
                        try {
                            int num = command.ExecuteNonQuery();
                            trans.Commit();
                        }
                        catch (Exception ex) {
                            trans.Rollback();
                            throw ex;
                        }
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
        }

整體需求如下:

從外部獲取數(shù)據(jù),要更新到數(shù)據(jù)庫中的一張表,且每天都需要進(jìn)行數(shù)據(jù)同步

實(shí)現(xiàn)思路

在數(shù)據(jù)庫中創(chuàng)建一個(gè)事務(wù)臨時(shí)表,表結(jié)構(gòu)與外部獲得的數(shù)據(jù)保持,將數(shù)據(jù)導(dǎo)入到臨時(shí)表,然后使用 Merge into 語法進(jìn)行增刪改 操作

到此這篇關(guān)于Oracle 臨時(shí)表 OracleDataAdapter 批量更新的文章就介紹到這了,更多相關(guān)Oracle 臨時(shí)表 OracleDataAdapter 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle的數(shù)據(jù)表中行轉(zhuǎn)列與列轉(zhuǎn)行的操作實(shí)例講解

    Oracle的數(shù)據(jù)表中行轉(zhuǎn)列與列轉(zhuǎn)行的操作實(shí)例講解

    這篇文章主要介紹了Oracle數(shù)據(jù)表中行轉(zhuǎn)列與列轉(zhuǎn)行的操作方法,這里分靜態(tài)和動(dòng)態(tài)情況作出了分類討論,需要的朋友可以參考下
    2015-12-12
  • rman配置及rman常用命令操作

    rman配置及rman常用命令操作

    這篇文章主要介紹了rman配置及rman常用命令操作,包括校驗(yàn)備份信息、查看備份、刪除備份等,需要的朋友可以參考下
    2014-03-03
  • oracle中如何刪除億級(jí)數(shù)據(jù)

    oracle中如何刪除億級(jí)數(shù)據(jù)

    這篇文章主要介紹了oracle中如何刪除億級(jí)數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Oracle出現(xiàn)超出打開游標(biāo)最大數(shù)的解決方法

    Oracle出現(xiàn)超出打開游標(biāo)最大數(shù)的解決方法

    這篇文章主要介紹了Oracle出現(xiàn)超出打開游標(biāo)最大數(shù)的解決方法,涉及針對(duì)Oracle游標(biāo)位置的判斷與處理技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • Oracle收縮減小表空間大小的方法詳解

    Oracle收縮減小表空間大小的方法詳解

    這篇文章主要介紹了Oracle收縮減小表空間大小的方法,比如我們發(fā)現(xiàn)一個(gè)表空間占用比較大,但是空閑空間很大,想要減小表空間占用大小,查看表空間的情況,文中有相關(guān)的代碼示例和圖文供大家參考,需要的朋友可以參考下
    2024-05-05
  • Oracle數(shù)據(jù)庫的系統(tǒng)結(jié)構(gòu)

    Oracle數(shù)據(jù)庫的系統(tǒng)結(jié)構(gòu)

    這篇文章主要介紹了Oracle數(shù)據(jù)庫的系統(tǒng)結(jié)構(gòu),Oracle數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)(Storage Structure)分為物理存儲(chǔ)結(jié)構(gòu)和邏輯存儲(chǔ)結(jié)構(gòu)兩種,分別描述了在操作系統(tǒng)中和數(shù)據(jù)庫系統(tǒng)內(nèi)部數(shù)據(jù)的組織管理方式,需要的朋友可以參考下
    2023-07-07
  • JDBC連接集群數(shù)據(jù)庫的方法

    JDBC連接集群數(shù)據(jù)庫的方法

    這篇文章主要介紹了JDBC連接集群數(shù)據(jù)庫的方法,有需要的朋友可以參考一下
    2013-12-12
  • Oracle刪除重復(fù)的數(shù)據(jù),Oracle數(shù)據(jù)去重復(fù)

    Oracle刪除重復(fù)的數(shù)據(jù),Oracle數(shù)據(jù)去重復(fù)

    這篇文章主要介紹了Oracle刪除重復(fù)的數(shù)據(jù),Oracle數(shù)據(jù)去重復(fù),需要的朋友可以參考下
    2016-08-08
  • Oracle遞歸查詢start with connect by prior的用法

    Oracle遞歸查詢start with connect by prior的用法

    這篇文章主要給大家介紹了關(guān)于Oracle遞歸查詢start with connect by prior、的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • oracle中的decode的使用介紹

    oracle中的decode的使用介紹

    這篇文章主要介紹了oracle中的decode函數(shù)的一些使用小技巧,需要的朋友可以參考下
    2013-09-09

最新評(píng)論

南川市| 邻水| 榆林市| 青铜峡市| 洛隆县| 忻州市| 旌德县| 石城县| 灵川县| 丰台区| 卢龙县| 浑源县| 拜泉县| 宝丰县| 河南省| 开封县| 都安| 福海县| 平安县| 红河县| 重庆市| 弥渡县| 阆中市| 鸡东县| 沾益县| 四子王旗| 施甸县| 太湖县| 芮城县| 攀枝花市| 秭归县| 永嘉县| 甘洛县| 故城县| 黑水县| 松滋市| 历史| 大安市| 志丹县| 资溪县| 安仁县|