Nov 23, 2011

Πώς να βρούμε ονόματα αντικειμένων στην Oracle που δεν είναι γραμμένα στα αγγλικά

Είτε χρησιμοποιώντας ένα εργαλείο μοντελοποίησης της Oracle βάσης δεδομένων, είτε απευθείας γράφοντας DDL scripts, είτε χρησιμοποιώντας ένα PL/SQL IDE, είναι δυνατόν να μας ξεφύγει στην πληκτρολόγηση ένας ελληνικός χαρακτήρας (ή όχι τουλάχιστον αγγλικός) από την εναλλαγή γλώσσας (language switch) στην ονομασία κάποιου αντικειμένου της βάσης. Σε μια τέτοια θέση βρέθηκα με την ονοματοδοσία ενός foreign key σε μια UTF8 βάση: το ADF έκανε reverse engineer το κλειδί και έφτιαξε ένα association που περιείχε το ελληνικούς χαρακτήρες. Με τη σειρά του o JHeadstart, με βάση τα associations, κατασκευάζει φιλικά μηνύματα του στυλ:
Cannot delete ΧΧΧ while dependent ΥΥΥ exists
που όμως κατά διάρκεια του generation γίνονται ακαταλαβίστικα (σε αυτό φταίει μάλλον ένα bug) και μάλιστα προοδευτικά, έπειτα από πολλαπλά generations, δημιουργούν property files αρκετών MBytes !

Για να βρω αυτές τις περιπτώσεις, χρησιμοποίησα τη συνάρτηση asciistr(http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions006.htm) που μετατρέπει σε ASCII μορφή το όρισμα της, ώστε να μπορούμε να βρούμε χαρακτήρες που δεν εμπίπτουν μέσα στο ASCII αλφάβητο.

select constraint_name, asciistr(constraint_name) from user_constraints where asciistr(constraint_name) like '%\%';

το αποτέλεσμα μου έδειξε το ένοχο constraint, με τον ελληνικό χαρακτήρα 'N':

FK_TRNSPES_TRΝSPE_SP_SPECIES FK_TRNSPES_TR\039DSPE_SP_SPECIES

No comments: