新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 教你快速掌握分別刪除數據表記錄的方法

        教你快速掌握分別刪除數據表記錄的方法

        作者: 時間:2017-06-13 來源:網絡 收藏
        很多情況下我們需要分別刪除的一些記錄,分批來提交以此來減少對于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!');


        關鍵詞: 數據表

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 都匀市| 手游| 和林格尔县| 涡阳县| 南澳县| 遂昌县| 班戈县| 淮北市| 南雄市| 馆陶县| 应城市| 景泰县| 邵东县| 于田县| 基隆市| 山阴县| 宿松县| 鹤岗市| 江北区| 梁山县| 廉江市| 来安县| 枞阳县| 北票市| 丰宁| 新晃| 夹江县| 美姑县| 桦川县| 湾仔区| 永兴县| 和龙市| 斗六市| 云梦县| 彭阳县| 建宁县| 昌都县| 武邑县| 剑阁县| 呼图壁县| 揭东县|