Η μετατροπή δεδομένων σε μορφή συμβολοσειράς μεταξύ διαφορετικών τύπων δεδομένων είναι συνήθως μια απλή διαδικασία στο Oracle, αλλά ορισμένες περιπτώσεις είναι λίγο πιο δύσκολες από άλλες. Ένα από αυτά συμβαίνει όταν χρησιμοποιείτε το Oracle για να μετατρέψετε το clob σε varchar2, κάτι που είναι δύσκολο επειδή α Η στήλη varchar2 έχει μέγιστο 4.000 χαρακτήρες, ενώ το clob μπορεί να αποθηκεύσει τεράστιες ποσότητες χαρακτήρων δεδομένα. Ωστόσο, μπορείτε να επιτύχετε τον στόχο σας, χρησιμοποιώντας είτε τη μέθοδο dbms_lob substr είτε to_char και προσδιορίζοντας ένα μέγιστο μέγεθος.
CLOB και VARCHAR2 Επεξήγηση
Το CLOB (ή "clob" στην καθομιλουμένη) είναι ένα αρκτικόλεξο για το "character large object" και μπορεί να αποθηκεύσει έως και 4 GB δεδομένων. Χρησιμοποιείται από πολλά συστήματα βάσεων δεδομένων, συμπεριλαμβανομένων των DB2 και Oracle. Το CLOB είναι χρήσιμο όταν χρειάζεται να αποθηκεύσετε τεράστιες ποσότητες δεδομένων, αλλά το ίδιο το μέγεθος μπορεί να προκαλέσει προβλήματα σε ορισμένες περιπτώσεις. Αυτός είναι ο λόγος για τον οποίο η μετατροπή από ένα Oracle CLOB σε μια μορφή συμβολοσειράς πιο διαχειρίσιμου μεγέθους είναι συχνά μια καλή προσέγγιση πριν από την εκτέλεση λειτουργιών.
Το βίντεο της ημέρας
Η μορφή VARCHAR2 αποθηκεύει μικρότερες ποσότητες δεδομένων, συνήθως έως 4.000 byte, εκτός εάν χρησιμοποιείτε εκτεταμένο μέγιστο μέγεθος συμβολοσειράς, οπότε μπορεί να φτάσει τα 32.767 byte. Για ένα σύνολο χαρακτήρων ενός byte, μπορείτε συνήθως να λάβετε έως και 4.000 χαρακτήρες σε μια στήλη. Η ασυμφωνία μεταξύ των μέγιστων μεγεθών αυτών των δύο μορφών δεδομένων είναι εκεί που προκύπτουν τα προβλήματα κατά τη μετατροπή.
Η μέθοδος dbms_lob substr
Για να μετατρέψετε μια συμβολοσειρά clob σε varchar2, ανοίξτε το πρόγραμμα SQL *Plus. Η σύνταξη για τη μετατροπή που πρέπει να πραγματοποιήσετε είναι:
SELECT dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte ) FROM πίνακα
Εδώ οι τιμές σε παρένθεση είναι αυτές που πρέπει να αλλάξετε, καθώς και ο "πίνακας" στο τέλος. Αυτά αντιστοιχούν στη στήλη ("clob_column") και στον πίνακα με τον οποίο εργάζεστε. Το "for_how_many_bytes" σάς δίνει την ευκαιρία να καθορίσετε πόσα byte δεδομένων θέλετε να μετατρέψετε και το "from_which_byte" σας επιτρέπει να καθορίσετε ένα σημείο εκκίνησης.
Έτσι, εάν έχετε έναν πίνακα που ονομάζεται "φόροι" και ένα πεδίο που ονομάζεται "net_pay", και υποθέτοντας ότι θέλετε 4.000 byte ξεκινώντας από το πρώτο, θα εισαγάγετε:
ΕΠΙΛΕΞΤΕ dbms_lob.substr (net_pay, 4000, 1) ΑΠΟ φόρους
Για να μετατρέψετε τη συμβολοσειρά σε μορφή varchar2.
Η μέθοδος TO_CHAR
Μπορείτε επίσης να χρησιμοποιήσετε την εντολή TO_CHAR με παρόμοια σύνταξη για να πετύχετε τον ίδιο στόχο:
SELECT TO_CHAR(SUBSTR (clob_column, 0,3999)) FROM πίνακα
Εδώ, τα byte αρχής και τέλους καθορίζονται ως 0 και 3999 (για μια συμβολοσειρά 4.000 χαρακτήρων που ξεκινά από την αρχή), αλλά τα πεδία "clob_column" και "table" χρησιμοποιούνται με τον ίδιο ακριβώς τρόπο όπως πριν. Έτσι, στο ίδιο παράδειγμα, θα μπορούσατε να εισάγετε:
SELECT TO_CHAR(SUBSTR (καθαρή_πληρωμή, 0,3999)) ΑΠΟ φόρους
Βασικά, αντί να ολοκληρώνεται η διαδικασία σε ένα μόνο βήμα, αυτό χρησιμοποιεί την εντολή SUBSTR για να τραβήξει μια υποσυμβολοσειρά από τη μεγαλύτερη συμβολοσειρά και, στη συνέχεια, χρησιμοποιεί το "to_char" για να χειριστεί τη μετατροπή. Εάν η εν λόγω στήλη clob έχει λιγότερα από 4.000 byte πληροφοριών, μπορείτε να εισαγάγετε το όνομα της στήλης στις παρενθέσεις μετά το to_char αντί να καθορίσετε μια δευτερεύουσα συμβολοσειρά.