| Archives of the TeradataForumMessage Posted: Tue, 13 Sep 2005 @ 16:09:11 GMT
 
 
  
| Subj: |  | Re: Urgent: Question on Teradata batch upsert |  |  |  | From: |  | Bob Hahn |  
 Here are 3 approaches using JDBC--multi-statement request, parameter markers, and parameter array. Multi-statement requests won't get the benefit of the statement cache since the values are in the SQL. Parameter array will benefit from the statement cache since the SQL text does not change from request to request. Parameter arrays are supported in Teradata V2R6.  In that case a single SQL statement is followed by many sets of related values.  The
performance can be quite good particularly if the pack count exceeds the amp count. 
     msStatement = conn.createStatement();
     for (i =0; i < numInserts;i += packCur ) {              // per batch loop
             for (j = 0; ((j < packCur) && (j < (numInserts-i)));j++) {
                     msStatement.addBatch("INSERT INTO INSERT_TEST VALUES ("
     +
     rowSeq++ + "," +  rowSeq++ + ");");
             }
             msStatement.executeBatch();
             msStatement.clearBatch();
             msStatement.close();
     }
     conn.commit();
     for (i =0; i < numInserts;i += packCur ) {              // per batch loop
             myStatement.delete(0,myStatement.length());
             for (j = 0; ((j < packCur) && (j < (numInserts-i)));j++) {
                     myStatement.append("Insert into insert_test values(?,?);");
             }
             pmStatement = conn.prepareStatement(myStatement.toString());
             for (j = 0; ((j < packCur) && (j < numInserts - i));j++) {
                     pmStatement.setLong((int)j*2+1,rowSeq++);
                     pmStatement.setLong((int)j*2+2,rowSeq);
             }
             pmStatement.executeUpdate();
             pmStatement.close();
             batchSeq++;
             }
             //conn.commit();
     paStatement = conn.prepareStatement ("Insert into insert_test values (?,?)");
     for (i =0; i < numInserts;i += packCur ) {              // per batch loop
       for (j = 0; ((j < packCur) && (j < numInserts - i));j++) {
              //padColStr = padCol.toString();
              paStatement.setLong((int)1,batchSeq++);
              paStatement.setLong((int)2,batchSeq);
              paStatement.addBatch();
     }
       paStatement.executeBatch();
       paStatement.clearBatch();
     }
     conn.commit();
 
 |