數據刪除

數據刪除

如果表格中存在錯誤或重複的數據,比較簡單、快捷的方法就是選定該數據,然後將其刪除。進行數據刪除時分為兩種:常用數據刪除的方法和偽列數據刪除的方法。

常用數據刪除方法

用DELETE語句刪除資料庫表中數據,當刪除的數據量不多時,可簡單地一次性刪除,但是當遇到數據量很大的情況系下,需要進行數據分割。可根據數據表自身特點按照欄位特徵來進行分割,不同的數據表中有不同的欄位就需要進行不同的分割,根據分割反覆進行DETELE刪除操作,否則就可能出現回滾段空間滿錯誤。

Oracle資料庫有一個或多個回滾段。回滾段是資料庫的一部分,是一個存儲區域,資料庫使用該存儲區域存放更新的事物或刪除行的數據值。刪除的數據原值就存在回滾段,對於批量數據可以分配給較大的回滾段,但也是有限的。每個回滾段的塊只能包含一個事物的信息,當刪除的數據記錄達到一定的數量,膨脹到難以承受的程式就不能進行相應正常的工作了。

偽列數據刪除方法

該方法分兩步來實現。首先使用游標技術收集滿足刪除條件記錄的ROWID值,其次根據已收集的ROWID集合,進行刪除操作。在刪除過程中一次刪除數據的記錄數可自定義。

偽列ROWID

Oracle資料庫中每個表中都有一個名為ROWID的偽列,是一個18位元組[數據對象編號(6位元組)+檔案編號(3位元組)+塊編號(6位元組)+行編號(3位元組)]的字元串,它允許使用保留字ROWID作為列名來訪問任意行的地址。ROWID偽列不存存儲在資料庫中,不占用任何空間,也不能被修改或刪除。只要表格中存在某個行,就有對應該行的ROWID。由於ROWID具有唯一性,因此ROWID可看做是資料庫表中每一行唯一的關鍵字。

利用偽列ROWID來實現批量數據刪除操作的,表結構為:

假設表中插入了18條記錄,在PL/SQL環境執行下條語句:

結果顯示為:

用ROWID刪除這18條中的一些記錄,SQL語句如下:

MFC ADO獲取記錄集

可在Visual C++中使用ADO訪問資料庫,並且自定義類CADOConn實現訪問操作。動態SQL語句可以通過參數傳給CADOConn::GetRecordSet函式獲取查詢結果,然後使用CADOConn::GetRecordCount函式獲得記錄數,再遍歷結果集,通過CADDOConn::GetCollect函式得到欄位值。

例如,從表student中檢索生日為“1991-07-17”的學生姓名name的值,並存放在變數strname中進行測試,代碼如下:

數據刪除的實現

這裡以上面的表student為例來說明具體實現步驟。假定該表有一定量的數據,以一次刪除10條數據為例,刪除過程如下:

提取偽列集合

提取符合條件的ROWID集合,無條件刪除全部記錄。若是有條件的情況,只需要將條件作為字元串加入到SQL字元串變數中。設定ROWID集合不超過10,構造ROWID集合字元串。

根據偽列值刪除數據

構造動態SQL語句,調用CADOConn::ExecuteSQL函式執行SQL語句,一次可刪除10條記錄數據。一般來說,一次刪除的記錄越多,速度越快,但是占用的ROLLBACK短也越大。

示例代碼如下:

相關詞條

熱門詞條

聯絡我們