bnvdarklord Δημοσ. 20 Φεβρουαρίου 2011 Δημοσ. 20 Φεβρουαρίου 2011 Καλησπέρα Κανω μια εργασία στην oracle και διαφάζω απο τις σημειώσεις του καθηγητή, και έχει τα εξής είδη function: map member function member function και order member function χωρις να εξηγει τι διαφορές έχουν. Εχω ψαξει στο internet αλλα δεν βρήκα πολλά πραγματα. Ευχαριστώ
MitsakosGR Δημοσ. 20 Φεβρουαρίου 2011 Δημοσ. 20 Φεβρουαρίου 2011 Και οι τρεις τύποι function έχουν να κάνουν με Object Oriented Programming σε PL/SQL. Οι MEMBER FUNCTION είναι οι απλές function που έχουν κάποιες λειτουργίες μέσα στο αντικείμενο. Η MAP MEMBER FUNCTION (ενικός γιατί μπορείς να έχεις μόνο μία σε κάθε αντικείμενο) χρησιμοποιείται από την PL/SQL για να ταξινομείς τα αντικείμενά σου (δεδομένου ότι δεν είναι standard type δεν ξέρει πως να τα ταξινομήσει για αυτό πρέπει να του το πεις εσύ). Αυτό που κάνει είναι να επιστρέφει από το αντικείμενό σου, έναν τύπο δεδομένων τον οποίο μπορεί να αναγνωρίσει ώστε να κάνει ταξινόμηση. Η ORDER MEMBER FUNCTION χρησιμοποιείται για τον ίδιο λόγο με την MAP με την διαφορά όμως ότι παίρνει σαν όρισμα ένα αντικείμενο και το συγκρίνει με το υπάρχον και επιστρέφει 0 αν θεωρούνται ίσα, έναν θετικό αν το όρισμα είναι μικρότερο από το ίδιο και έναν αρνητικό αν το όρισμα είναι μεγαλύτερο από το ίδιο το αντικείμενο. Για περισσότερες πληροφορίες και παραδείγματα δες εδώ. (Αν κάνεις μία αναζήτηση για MAP MEMBER FUNCTION θα βρεις την παράγραφο που τα εξηγεί.)
Aztec Δημοσ. 20 Φεβρουαρίου 2011 Δημοσ. 20 Φεβρουαρίου 2011 Η διαφορά είναι η εξής Οι member functions είναι όπως είναι οι μέθοδοι σε άλλες γλώσσες. Δηλαδη ορίζεις τις μεθόδους του αντικειμένου. Οι map | sort functions χρησιμοποιούνται για equality λόγους. Η Oracle όταν προσπαθείς να συγκρίνεις δύο αντικέμενα θεωρεί ότι είναι ίδια αν όλα τα member variables είναι ίδια και φυσικά δεν είναι null. Επομένως όταν υλοποιείς user defines objects και δεν έχεις κάποια map ή sort function μπορείς να φτάσεις μόνο μέχρι συγκρίσεις object_1=object_2 και object_3!=object_4 και μόνο σε SQL. Τι γίνεται όμως όταν θέλεις να έχεις συγκρίσεις τύπου <=, < , >, >= ή θέλεις να χρησιμοποιήσεις order by ? Εκεί έρχονται οι map order member functions. Μπορείς να ορίσεις μόνο μία σε κάθε user defined type. Στην ουσία στην map member function βάζεις την δική σου λογική και επιστρέφεις μια scalar μεταβλητη. Δηλαδή αν ας πούμε έχουμε το ακόλουθο >CREATE OR REPLACE TYPE aztec AS OBJECT ( aztec1 NUMBER (10), aztec2 NUMBER (10), MAP MEMBER FUNCTION to_div RETURN NUMBER ); CREATE OR REPLACE TYPE BODY aztec AS MAP MEMBER FUNCTION to_div RETURN NUMBER IS ret_aztec number(10); BEGIN ret_aztec:=SELF.aztec1/SELF.aztec2; return ret_aztec; END END; Τι μας λέει στην ουσία εδώ. Ας πούμε ότι έχουμε τα object a1 και α2 τύπου Aztec. Πλέον η σύγκριση δεν θα είναι μεταξύ των member variables αλλά όταν θα γράψουμε a1>a2(πλέον μπορούμε) η oracle θα το εκλάβει ως a1.to_div()>a2.to_div(). Στην ουσία συνοπτικά κάνεις override το compare της oracle μεταξύ αντικειμένων, υλοποιείς ένα δικό σου κάτι που είναι απαραίτητο αν δεν σε ενδιαφέρουν μονο οι τελεστες (=|!=) για τα κατ αντιστοιχία member variables. Τα ίδια σου δίνει και η order απλά έχει μια διαφοερτική λογική υλοποίησης. Για αυτό μπορείς να υιοθετήσεις μόνο την μία.
bnvdarklord Δημοσ. 20 Φεβρουαρίου 2011 Μέλος Δημοσ. 20 Φεβρουαρίου 2011 Ευχαριστώ πολυ, νομίζω πως κατάλαβα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.