Clarification on Oxidation Number and Ionic Charge
For simple mononuclear ions in ionic compounds, as you have in $\ce{NaCl, Al2O3, ZnS}$ or $\ce{GaN}$, the oxidation state of each element will always equal its ionic charge: $\ce{Na+}$ has $\mathrm{+I}$, $\ce{Al^3+}$ $\mathrm{+III}$, $\ce{Zn^2+}$ $\mathrm{+II}$, $\ce{Ga^3+}$ $\mathrm{+III}$, $\ce{Cl-}$ $\mathrm{-I}$, $\ce{O^2-}$ $\mathrm{-II}$, $\ce{S^2-}$ $\mathrm{-II}$ and $\ce{N^3-}$ $\mathrm{-III}$.

Something like the oxalate anion $\ce{C2O4^2-}$ is a multinuclear anion. Its ionic charge is $2-$, as evident by the superscript. However, you cannot always determine the constituent elements’ oxidation states a priori — the only thing you do know is that the sum of the oxidation states must equal the charge number. In oxalate, carbon has $\mathrm{+III}$ as you correctly mentioned and oxygen has $\mathrm{-II}$, as it should be of no surprise to you. Added up, this leaves us with:

$$2 \times (+3) + 4 \times (-2) = +6 + -8 = -2$$

And $2-$ is the ionic charge as we already know. This rule goes both ways, so you can use the (known) ionic charge of a multinuclear ion to determine an element’s oxidation state if the other oxidation states are known: in $\ce{SO3^2-}$ oxygen has $\mathrm{-II}$, so sulphur can only have $\mathrm{+IV}$.