Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
Database Servers
DB2InformixIngresMS SQLOraclePervasive.SQLPostgreSQLProgressSybase
Desktop Databases
FileMakerFoxProMS AccessParadox
General
General DB TopicsDatabase Theory
Related Topics
Java Development.NET DevelopmentVB DevelopmentMore Topics ...

Database Forum / DB2 Topics / March 2006

Tip: Looking for answers? Try searching our database.

my db2 routine deleting records with commit count ,any advice ?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
heming_g@hotmail.com - 24 Feb 2006 08:06 GMT
drop procedure sp_DelTable_CommitCount@
CREATE PROCEDURE sp_DelTable_CommitCount(IN as_TableName VARCHAR(128) ,

                            IN as_Condition VARCHAR(1024) ,

                            IN abi_CommitCount BIGINT)

LANGUAGE SQL
BEGIN
       DECLARE  sm_End                 SMALLINT DEFAULT 0;
       DECLARE  retcode                INTEGER DEFAULT 0;
       DECLARE  SQLCODE                INTEGER DEFAULT 0;

       DECLARE  vc_DelStmt             VARCHAR(1024);
       DECLARE  vc_IntactStmt            VARCHAR(4096);
       DECLARE    vc_CreatViewStmt        VARCHAR(4096);
       DECLARE    vc_tmpviewname            VARCHAR(128);
       DECLARE    vc_DropViewStmt        VARCHAR(256);

       DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING
       BEGIN
           EXECUTE IMMEDIATE vc_DropViewStmt ;
           RESIGNAL;                  --

       END;

       DECLARE CONTINUE HANDLER FOR NOT FOUND
           SET  sm_End = 1;

    SET vc_IntactStmt = '( del_tmp_ID ) as  select  row_number()over()
from '||as_TableName||' where '||as_Condition;
    SET vc_tmpviewname = 'tmp_view'||Replace(Replace(Rtrim(char(current
timestamp)),'-',''),'.','');
    SET vc_DropViewStmt = 'DROP VIEW '||vc_tmpviewname;
    SET vc_CreatViewStmt = ' create view '||vc_tmpviewname||vc_IntactStmt
;

    EXECUTE IMMEDIATE vc_CreatViewStmt ;
       Commit_Loop:
       Loop

               SET vc_DelStmt = 'DELETE FROM '||vc_tmpviewname||'
where del_tmp_ID BETWEEN 1 AND '||RTRIM(CHAR(abi_CommitCount));
               INSERT INTO TMP4 VALUES (vc_DelStmt);
               EXECUTE IMMEDIATE vc_DelStmt;
               COMMIT;
               IF (sm_End=1) THEN
                   LEAVE Commit_Loop;
               End If ;

       End Loop Commit_Loop;

       EXECUTE IMMEDIATE vc_DropViewStmt ;

       return 0;                     
                       
END@
Serge Rielau - 24 Feb 2006 12:31 GMT
> drop procedure sp_DelTable_CommitCount@
> CREATE PROCEDURE sp_DelTable_CommitCount(IN as_TableName VARCHAR(128) ,
[quoted text clipped - 53 lines]
>                         
> END@

Which version of DB2 are you on?
Starting in DB2 V8.1.4 you can do thsi a lot simpler (and without the view):
DELETE FROM (SELECT 1 FROM <name> WHERE <condition> FETCH FIRST <n> ROWS
ONLY)
Prepare this one ONCE then EXECUTE in the loop.
If you are prior to V8.1.4 at least move the PREPARE out of the loop.

Cheers
Serge
Signature

Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

heming_g@hotmail.com - 02 Mar 2006 05:31 GMT
thx for your help
i do a stupid thing before .. ha
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.