Jan 25, 2009

Χρησιμοποιώντας regular expressions σε SQL queries στην Oracle

Θα έλεγα πως πολλές φορές συμφωνώ με τον Thomas Kyte (http://tkyte.blogspot.com/) που συνοψίζει πως για να λύσουμε ένα θέμα σχετικά με την ανάπτυξη στη βάση δεδομένων της Oracle:
  • αρχικά προσπαθούμε να το λύσουμε σε ένα μόνο SQL statement
  • αν αυτό δεν είναι εφικτό, τότε δοκιμάζουμε να προγραμματίσουμε σε PL/SQL
  • αν και αυτό δεν μας καλύπτει, τότε καταφεύγουμε σε μια γλώσσα προγραμματισμού όπως η Java.
Κάτι τέτοιο μου ήλθε στο μυαλό όταν χρειάστηκε να συντηρήσω ένα κομμάτι κώδικα που ανακτούσε εγγραφές από τη βάση δεδομένων που αντιπροσώπευαν χρήστες του συστήματος, έπειτα τις εξέταζαν αν περιέχουν σωστές διευθύνσεις ηλεκτρονικής αλληλογραφίας, προτού προχωρήσουν σε επεξεργασία και σε τελική ειδοποίηση των χρηστών. Η ανάκτηση από τη βάση και ο έλεγχος από τον application server δημιουργούσε καθυστερήσεις στην εκτέλεση και υψηλό κόστος επικοινωνίας μεταξύ των δυο επιπέδων. Μια πιο αποτελεσματική προσέγγιση θα ήταν να εκμεταλλευτούμε τα χαρακτηριστικά της βάσης, όπως για παράδειγμα την χρήση regular expressions στο query.

select emp.*
from employees emp
where regexp_like (email, '[a-z,A-Z,0-9]+\@[a-z,A-Z,0-9]+\.[a-z,A-Z,0-9]+');


H έκδοση 10g της Oracle υποστηρίζει regular expressions, συμβατές με το πρότυπο POSIX και προσφέρει τις functions regexp_like, regexp_replace, regexp_instring και regexp_substring. Περισσότερες πληροφορίες βρίσκονται στο: http://www.oracle.com/technology/products/database/application_development/pdf/TWP_Regular_Expressions.pdf

No comments: