From a functional standpoint, they serve two totally different functions in an aquarium. Ottos eat soft algae that forms on surfaces like the panes of glass, large rocks & other hardscape, and occasionally on something like driftwood. They also eat diatoms ("brown algae" though it's not really an algae) that grows on those same surfaces. Ottos will spend 99% of their time attached to the aforementioned hard surfaces, and very rarely if ever will be on the substrate. If a tank has enough algae on its surfaces to keep the ottos well-fed, they will display little to no interest in any food that might makes its way to the surface of the substrate.
Corys, on the other hand, are omnivores who spend most of their time on the substrate. They will not eat any of the algae types I mentioned in the previous paragraph. Instead, they are a "cleanup crew" that will eat leftover bits of food that fall down and make their way to the substrate.
So is you are looking for a cleanup crew to keep your substrate free of leftover food, go with corys. If you have algae problems on your glass and other surfaces, go with ottos.
Behaviorally, both are schooling fish though it is probably more important to the health & well-being of corys than it is with ottos. And corys are far, far more active (and fun) in a tank than ottos are.