The address confirmation may only be valid as a confirmation one time, but that doesn't mean that you have to have no knowledge of it once it has been used. You could store confirmation links for a period of time (say a month), and if someone tries to use it again in that period of time, you would show them a page explaining that the email address (and show them the address) has already been confirmed. That way you are showing them useful information and not just an error.
The address email@example.com has already been confirmed. If you would like to change your email address in your account please sign in.
Then if you use a structured url for confirmations, even once you have deleted the confirmation code from your database, you will still know that they are trying to confirm an address. For example, if the URL structure were
mydomain.com/confirm/some-code-here you could always show a generic message page stating that the confirmation code has already been used or expired
The confirmation link has already been used or expired. Why don't you sign in to your account and blah blah blah.
In general, if you have a way of giving constructive information, you should do that rather than throw a generic error page.