• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 教你快速掌握分別刪除數(shù)據(jù)表記錄的方法

    教你快速掌握分別刪除數(shù)據(jù)表記錄的方法

    作者: 時(shí)間:2017-06-13 來(lái)源:網(wǎng)絡(luò) 收藏
    很多情況下我們需要分別刪除的一些記錄,分批來(lái)提交以此來(lái)減少對(duì)于Undo的使用,下面我們提供一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)此邏輯。


    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.


    注釋:在此實(shí)例中修正了一下,增加了2個(gè)缺省值,以下是具體過(guò)程:


    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!');


    關(guān)鍵詞: 數(shù)據(jù)表

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 岗巴县| 安平县| 南召县| 大丰市| 汉川市| 高安市| 天祝| 临汾市| 枣阳市| 原平市| 漯河市| 德令哈市| 郓城县| 荣成市| 项城市| 潞城市| 澄城县| 永定县| 宿松县| 庄浪县| 孝昌县| 惠水县| 成武县| 黑水县| 荔波县| 咸阳市| 湘潭市| 册亨县| 湖南省| 南漳县| 丽水市| 称多县| 修文县| 抚松县| 三穗县| 富川| 上饶市| 长武县| 台南县| 建阳市| 富锦市|