Δεν υπάρχει ενιαία "σύνταξη" μέσα σε καθαρό SQL ή PL/SQL στο Oracle 9i για αυτό το έργο. Η προσέγγιση περιλαμβάνει διάφορα βήματα:
1. Εξωτερική διαδικασία: Θα δημιουργήσετε μια αποθηκευμένη διαδικασία (στο PL/SQL) που καλεί μια εξωτερική διαδικασία γραμμένη σε γλώσσα όπως η Java ή C. Αυτή η εξωτερική διαδικασία θα χειριστεί το πραγματικό αρχείο I/O (άνοιγμα, ανάγνωση και κλείσιμο του αρχείου).
2. Κωδικός Java ή C: Η εξωτερική διαδικασία (π.χ. μια κλάση Java ή μια λειτουργία C) θα χρησιμοποιήσει τα κατάλληλα API του λειτουργικού συστήματος (όπως το `fopen`, το` fread`, το fclose` στο C ή το Java's `FileInputStream 'και σχετικές κατηγορίες) για να διαβάσουν τα περιεχόμενα του αρχείου κειμένου.
3. pl/sql περιτύλιγμα: Η συνάρτηση περιτύλιξης PL/SQL θα καλέσει την εξωτερική διαδικασία, θα χειριστεί τυχόν σφάλματα και θα επιστρέψει τα περιεχόμενα του αρχείου ως συμβολοσειρά (ή ίσως ως `clob` εάν το αρχείο είναι πολύ μεγάλο).
Εννοιολογικό παράδειγμα (επεξηγηματικό - απαιτεί σημαντική κωδικοποίηση):
Αυτό είναι ένα * σκίτσο * υψηλού επιπέδου * και δεν αντιπροσωπεύει μετακομμένο κώδικα. απλώς περιγράφει την ιδέα:
`` sql
- PL/SQL περιτύλιγμα
Δημιουργία ή αντικατάσταση της διαδικασίας get_file_contents (
p_filepath σε varchar2,
p_file_contents out clob
)
Εξωτερική διαδικασία get_file_contents_java (p_filepath varchar2, p_file_contents clob); -ισοδύναμο Java
ΑΡΧΙΖΩ
get_file_contents_java (p_filepath, p_file_contents);
ΕΞΑΙΡΕΣΗ
Όταν άλλοι τότε
Dbms_output.put_line ('Αρχείο ανάγνωσης σφάλματος:' || sqlerrm);
ΤΕΛΟΣ;
/
- Παράδειγμα χρήσης (μετά την κατάρτιση του κώδικα Java και την καταχώρισή του με την Oracle)
ΔΗΛΩΝΩ
v_file_contents clob;
ΑΡΧΙΖΩ
get_file_contents ('/path/to/my/file.txt', v_file_contents);
Dbms_output.put_line (v_file_contents); - Εκτυπώστε τα περιεχόμενα του αρχείου (περικοπή εάν είναι πολύ μεγάλο)
ΤΕΛΟΣ;
/
`` `
Σημαντικές εκτιμήσεις:
* Κωδικός Java/C: Θα χρειαστεί να γράψετε και να συντάξετε τον πραγματικό κωδικό Java ή C που εκτελεί το αρχείο I/O. Αυτός ο κώδικας θα πρέπει στη συνέχεια να φορτωθεί στη βάση δεδομένων Oracle χρησιμοποιώντας το κατάλληλο `loadjava` (για Java) ή παρόμοιες εντολές.
* Δικαιώματα: Ο χρήστης της βάσης δεδομένων Oracle χρειάζεται κατάλληλα δικαιώματα λειτουργικού συστήματος για πρόσβαση στον κατάλογο και το αρχείο.
* Ασφάλεια: Να είστε εξαιρετικά προσεκτικοί για να επιτρέψετε στη βάση δεδομένων να έχει πρόσβαση σε αυθαίρετα αρχεία στο σύστημα αρχείων λόγω σημαντικών κινδύνων ασφαλείας. Περιορίστε την πρόσβαση σε συγκεκριμένες, αξιόπιστες τοποθεσίες.
* Χειρισμός σφαλμάτων: Ο ισχυρός χειρισμός των σφαλμάτων είναι ζωτικής σημασίας για την εξωτερική διαδικασία και το περιτύλιγμα PL/SQL για τη διαχείριση πιθανών εξαιρέσεων (αρχείο δεν βρέθηκε, θέματα άδειας κ.λπ.).
* μεγάλα αρχεία: Για πολύ μεγάλα αρχεία, η χρήση του `clob` είναι πιο κατάλληλο από το` varchar2` για να αποφευχθούν περιορισμοί μεγέθους.
Λόγω της πολυπλοκότητας, αυτό δεν είναι ένα ασήμαντο έργο στο Oracle 9i. Οι σύγχρονες εκδόσεις βάσης δεδομένων συχνά προσφέρουν περισσότερες βελτιωμένες μεθόδους (όπως το UTL_FILE, αν και ακόμη και αυτό έχει ανησυχίες για την ασφάλεια και την άδεια), αλλά η Oracle 9i απαιτεί αυτή την πιο εμπλεκόμενη προσέγγιση εξωτερικής διαδικασίας. Πάντα να δίνετε προτεραιότητα στην ασφάλεια όταν επιτρέπεται η πρόσβαση στη βάση δεδομένων στα αρχεία του λειτουργικού συστήματος.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα