国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

用存儲過程實現刪除數據表的部分記錄

2024-07-21 02:42:04
字體:
來源:轉載
供稿:網友

在實際的工作和學習中,許多人經常需要分別刪除數據表的某些記錄,分批提交以此來減少對于Undo的使用,下面我們提供一個簡單的存儲過程來實現此邏輯。

SQL> create table test as select * from dba_objects;Table created.SQL> create or replace PRocedure deleteTab  2  /**  3   ** Usage: run the script to create the proc deleteTab  4   **        in SQL*PLUS, type "exec deleteTab('Foo','ID>=1000000','3000');"  5   **        to delete the records in the table "Foo", commit per 3000 records.  6   **       Condition with default value '1=1' and default Commit batch is 10000.  7   **/  8  (  9    p_TableName    in    varchar2,    -- The TableName which you want to delete from 10    p_Condition    in    varchar2 default '1=1',    -- Delete condition, such as "id>=100000" 11    p_Count        in    varchar2 default '10000'    -- Commit after delete How many records 12  ) 13  as 14   pragma autonomous_transaction; 15   n_delete number:=0; 16  begin 17   while 1=1 loop 18     EXECUTE IMMEDIATE 19       'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn' 20     USING p_Count; 21     if SQL%NOTFOUND then 22     exit; 23     else 24          n_delete:=n_delete + SQL%ROWCOUNT; 25     end if; 26     commit; 27   end loop; 28   commit; 29   DBMS_OUTPUT.PUT_LINE('Finished!');  30   DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!'); 31  end; 32  /Procedure created.SQL> insert into test select * from dba_objects;6374 rows created.SQL> /6374 rows created.SQL> /6374 rows created.SQL> commit;Commit complete.SQL> exec deleteTab('TEST','object_id >0','3000')Finished!Totally 19107 records deleted!PL/SQL procedure successfully completed.

注釋:在此實例中修正了一下,增加了2個缺省值,以下是具體過程:

create or replace procedure deleteTab(                                                                                                  p_TableName    in    varchar2,    -- The TableName which you want to delete from                 p_Condition    in    varchar2 default '1=1',    -- Delete condition, such as "id>=100000"                      p_Count        in    varchar2 default '10000'    -- Commit after delete How many records                      )                                                                                                as                                                                                                pragma autonomous_transaction;                                                                   n_delete number:=0;                                                                             begin                                                                                             while 1=1 loop                                                                                     EXECUTE IMMEDIATE                                                                                  'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'                      USING p_Count;                                                                                   if SQL%NOTFOUND then                                                                             exit;                                                                                            else                                                                                                  n_delete:=n_delete + SQL%ROWCOUNT;                                                          end if;                                                                                          commit;                                                                                        end loop;                                                                                        commit;                                                                                          DBMS_OUTPUT.PUT_LINE('Finished!');                                                               DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');

注釋:讀者可以根據自己的實際情況來進行適當的調整。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万全县| 南昌市| 南投县| 师宗县| 天全县| 思南县| 三门县| 新和县| 湘阴县| 晋宁县| 伊宁县| 博客| 长治县| 黎川县| 邹城市| 赞皇县| 宁夏| 台安县| 怀安县| 竹北市| 平利县| 永城市| 无锡市| 安宁市| 报价| 铁岭县| 漯河市| 唐海县| 虎林市| 兴山县| 广东省| 乌鲁木齐县| 南投县| 大港区| 公主岭市| 孝义市| 城固县| 玛纳斯县| 加查县| 建始县| 德昌县|