在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間:2017-06-13 來源:網絡 收藏
            很多情況下我們需要分別刪除的一些記錄,分批來提交以此來減少對于Undo的使用,下面我們提供一個簡單的存儲過程來實現(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.


            注釋:在此實例中修正了一下,增加了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!');


            關鍵詞: 數據表

            評論


            相關推薦

            技術專區(qū)

            關閉