что-то вроде этого (код не проверен)
Код:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.contract.bean.ContractManager;
import bitel.billing.server.contract.bean.ContractParamUtils;
import bitel.billing.server.contract.bean.ContractUtils;
import bitel.billing.server.util.TimeUtils;
import bitel.billing.server.util.Utils;
        mid = 0; //код dialup модуля
        dealerGroup = 0; //группа договоров дилеры
        unsetGroup = 0; //группа договоров непривязанные
        paramRegexpFromNumber = 0; //параметр договора дилера - regexp для from_number
        paramDealerCid = 0; //параметр договора - ссылка на договор дилера
        now = new java.util.GregorianCalendar();
        now.set( java.util.Calendar.DATE, -1 );
        tableName = Utils.getModuleMonthTableName( "log_session", now, mid );
        
        cpu = new ContractParamUtils( con );
        selectContractPS = con
                .prepareStatement( "SELECT id, title FROM contract WHERE (gr&(1<<?))>0" );
        dealerMap = new HashMap();
        print( "Select dealers:" );
        selectContractPS.setInt( 1, dealerGroup );
        selectContractRS = selectContractPS.executeQuery();
        while( selectContractRS.next() )
        {
            cid = selectContractRS.getInt( 1 );
            title = selectContractRS.getString( 2 );
            regexp = cpu.getStringParam( cid, paramRegexpFromNumber );
            dealerMap.put( cid, java.util.regex.Pattern.compile( regexp ) );
            print( title + ": " + regexp );
        }
        selectContractRS.close();
        print( "Set dealer by from_number:" );
        
        selectLoginsPS = con.prepareStatement( "SELECT id FROM user_login_" + mid + " WHERE cid=?" );
        selectContractPS.setInt( 1, unsetGroup );
        selectContractRS = selectContractPS.executeQuery();
        while( selectContractRS.next() )
        {
            cid = selectContractRS.getInt( 1 );
            title = selectContractRS.getString( 2 );
            print( "Processing " + title );
            
            logins = new StringBuilder();
            
            selectLoginsPS.setInt( 1, cid );
            selectLoginsRS = selectLoginsPS.executeQuery();
            while(selectLoginsRS.next())
            {
                logins.append( selectLoginsRS.getInt( 1 ) );
                logins.append( "," );
            }
            selectLoginsRS.close();
            
            if( logins.length() > 0 )
            {
                logins.setLength( logins.length() - 1 );
            }
            else
            {
                print( "Logins not found!" );
                continue;
            }
            
            selectFromNumberPS = con.prepareStatement( "SELECT from_number FROM " + tableName
                    + " ORDER BY session_start WHERE lid IN (" + logins + ") LIMIT 0,1" );
            rs = selectFromNumberPS.executeQuery();
            if( rs.next() )
            {
                fromNumber = rs.getString( 1 );
                iter = dealerMap.entrySet().iterator();
                while( iter.hasNext() )
                {
                    e = iter.next();
                    pattern = e.getValue();
                    dealerCid = e.getKey();
                    if( pattern.matcher( fromNumber ).matches() )
                    {
                        //устанавливаем параметр-ссылку на договор дилера
                        ps = con.prepareStatement( "UPDATE contract_parameter_type_8 SET val=? WHERE cid=? AND pid=?" );
                        
                        ps.setInt( 1, dealerCid );
                        ps.setInt( 2, cid );
                        ps.setInt( 3, paramDealerCid );
                        
                        if( ps.executeUpdate() == 0 )
                        {
                            ps.close();
                            
                            ps = con.prepareStatement( "INSERT INTO contract_parameter_type_7 (cid, pid, val) VALUES(?, ?, ?)" );
                            
                            ps.setInt( 1, cid );
                            ps.setInt( 2, paramDealerCid );
                            ps.setInt( 3, dealerCid );
                            
                            ps.executeUpdate();
                        }
                        
                        ps.close();
                        
                        cpu.unsetGroup( cid, unsetGroup ); //убираем договор из группы непривязанные
                        break;
                    }
                }
            }
            
            selectFromNumberPS.close();
        }