ORDER BY erwartet einen Feldliste, einen Feldindex (Zahl von 1 bis ...) oder einen Ausdruck.
UPPER() erwartet dagegen nur einen Feldnamen oder einen Ausdruck, der ein String ist.
Das ist jetzt etwas verkürzt ausgedrückt; die genaue Syntax kann man aus der BNF ermitteln:
http://savage.net.au/SQL/sql-99.bnf....%20by%20clause