I have written the code below and for some reason it works in Sandbox but fails in Production when I try to update an Opportunity. Error code appears: "PrimaryContactOpp: System.LimitException: Too many DML rows: 10001"
I have listed the Opportunity Trigger below.
trigger PrimaryContactOpp on Opportunity (after update) {
if(checkRecursive.runOnce()){
list<OpportunityContactRole> ocr0 = [SELECT Id, OpportunityId, ContactId, IsPrimary, Role FROM OpportunityContactRole WHERE IsPrimary = true];
set<ID> oppIds = new set<ID>();
map<ID, ID> oppContactMap = new map<ID, ID>();
map<ID, string> contactRoleMap = new map<ID, string>();
list<Opportunity> oppUpdate = new list<Opportunity>();
for (Opportunity opp0: trigger.new){
for (OpportunityContactRole ocr1: ocr0){
oppIds.add(ocr1.OpportunityId);
oppContactMap.put(ocr1.OpportunityId, ocr1.ContactId);
contactRoleMap.put(ocr1.ContactId, ocr1.Role);
}
}
list<Opportunity> prime = [SELECT Id FROM Opportunity WHERE ID IN: oppIds];
list<Opportunity> noPrime = [SELECT Id FROM Opportunity WHERE ID NOT IN: oppIds];
for (Opportunity opp0: trigger.new){
for(Opportunity opp1: prime){
opp1.Primary_Contact__c = oppContactMap.get(opp1.id);
opp1.Role__c = contactRoleMap.get(oppContactMap.get(opp1.id));
oppUpdate.add(opp1);
}
for(Opportunity opp2: noPrime){
opp2.Primary_Contact__c = null;
opp2.Role__c = null;
oppUpdate.add(opp2);
}
}
try {
update oppUpdate;
}
catch (DMLException e) {
for (Opportunity con : trigger.new) {
con.addError(e.getDmlMessage(0));
}
}
}
}