#

Χειρισμός Τύπων Δεδομένων στα Page Items του Oracle APEX

1. Τα Page Items αποθηκεύονται ως VARCHAR2 (κείμενο)

Στο Oracle APEX όλες οι τιμές των page items αποθηκεύονται εσωτερικά στη session state ως VARCHAR2, ανεξάρτητα από τον τύπο της αντίστοιχης στήλης στη βάση. Ακόμα κι αν ένα item αντιπροσωπεύει πεδίο DATE ή NUMBER, ο APEX το χειρίζεται ως κείμενο. Ο τύπος εμφάνισης (Date Picker, Number Field κ.λπ.) επηρεάζει μόνο τη μορφοποίηση, όχι τον εσωτερικό τύπο. Έτσι, μια μεταβλητή bind όπως :P1_ITEM αντιμετωπίζεται πάντα ως string έως ότου μετατραπεί ρητά στον σωστό τύπο.


2. Δέσμευση τιμών Page Items σε στήλες βάσης (DML)

Φόρτωση εγγραφής (page load)

  • Ο APEX εκτελεί query στη βάση και μετατρέπει (με TO_CHAR) αριθμούς ή ημερομηνίες σε μορφοποιημένα strings πριν τα βάλει στα page items, ώστε να εμφανιστούν σωστά.

Υποβολή φόρμας (insert / update)

  • Οι τιμές που υποβάλλει ο χρήστης έρχονται ως κείμενο. Η διαδικασία Automatic Row Processing παράγει TO_DATE, TO_NUMBER κ.λπ. βάσει της μάσκας μορφής του κάθε item, για να τις μετατρέψει και να τις γράψει στη βάση.

  • Αν δεν έχει οριστεί μάσκα, χρησιμοποιούνται τα προεπιλεγμένα NLS / ρυθμίσεις γλωσσοποίησης της εφαρμογής.


3. Ιδιαιτερότητες για DATE Items

  • Ρητή μετατροπή σε PL/SQL: Σε κώδικα PL/SQL συγκρίνετε ημερομηνίες με TO_DATE(:P5_DATE,'DD-MM-YYYY') κ.λπ.• Μην βασίζεστε σε σύγκριση strings.

  • Validations / Conditions: Χρησιμοποιήστε server-side ή client-side validations για «έγκυρη ημερομηνία» και ορίστε μάσκες μορφής.

  • Globalization: Ορίστε Application Date Format (Shared Components → Globalization) για ενοποίηση φορμάτ.


4. Ιδιαιτερότητες για NUMBER Items

  • Η εμφάνιση γίνεται με TO_CHAR και η εισαγωγή με TO_NUMBER βάσει μάσκας.

  • Σε custom SQL/PLSQL κάντε ρητό TO_NUMBER(:P1_AMOUNT,'999G999D00').

  • Πολύ μεγάλοι αριθμοί (>16 ψηφία): χρησιμοποιήστε Text Field αντί για Number Field στον client και χειριστείτε τη μετατροπή στον server.


5. Βέλτιστες Πρακτικές

  1. Σωστός τύπος item + μάσκα μορφής (π.χ. Date Picker με DD/MM/YYYY).

  2. Εμπιστευτείτε τις αυτόματες μετατροπές των Automatic Row Fetch/DML, αλλά…

  3. χρησιμοποιήστε ρητά TO_DATE/TO_NUMBER σε δικό σας κώδικα.

  4. Ρυθμίστε σωστά τα Globalization Attributes (NLS, μάσκες ημερομηνίας/αριθμού).

  5. Ορίστε Column Formats σε Reports για συνεπή παρουσίαση.

  6. Προσθέστε validations για ημερομηνίες/αριθμούς, με φιλικά μηνύματα.

  7. Δοκιμάστε edge cases (τέλος μήνα, μεγάλοι αριθμοί, διαφορετικές τοπικές ρυθμίσεις).


6. Επιπλέον δυνατότητες APEX

  • APEX APIs: APEX_UTIL.GET_SESSION_STATE επιστρέφει string· μετατρέψτε το ρητά.

  • JavaScript βιβλιοθήκες: apex.locale.toNumber() & apex.date.parse() για client-side μετατροπές σύμφωνες με τις ρυθμίσεις locale.

  • Collections: Έχουν 5 στήλες DATE (D001-D005) & NUMBER (N001-N005)· αν βάλετε επιπλέον τιμές, θα είναι κείμενο κι εσείς πρέπει να κάνετε μετατροπή.


Συνοψίζοντας

Στον APEX τα πάντα έρχονται/φεύγουν ως κείμενο. Ο σωστός χειρισμός ημερομηνιών και αριθμών βασίζεται:

  • Στις μάσκες μορφής των items/στηλών,

  • Στις ρητές μετατροπές σε SQL/PLSQL,

  • Στις ρυθμίσεις Globalization, και

  • Στις κατάλληλες validations.

Ακολουθώντας αυτά, αποφεύγετε λάθη από λανθασμένες συγκρίσεις strings ή NLS ασυμβατότητες και εξασφαλίζετε αξιόπιστες εφαρμογές APEX.