Oracle map member function
banhill @ 2009 február 21, szombat
A típus definiciójában megmondjuk, hogy lesz egy map member function, a type body-ban pedig meg is írjuk.
CREATE OR REPLACE TYPE bogus_type AS OBJECT ( ord_value NUMBER, user_comment VARCHAR2(160), MAP MEMBER FUNCTION mapper RETURN NUMBER ); CREATE OR REPLACE TYPE BODY bogus_type AS MAP MEMBER FUNCTION mapper RETURN NUMBER IS BEGIN RETURN self.ord_value; END; END;
Előkészítjük a tesztet.
CREATE TABLE bogus_table ( ord_value NUMBER, user_comment VARCHAR2(160)); INSERT INTO bogus_table VALUES (1, 'bla1'); INSERT INTO bogus_table VALUES (-1, 'bla-1'); INSERT INTO bogus_table VALUES (3, 'bla3'); INSERT INTO bogus_table VALUES (2, 'bla2');
Demonstráljuk, hogy működik:
DECLARE TYPE bogus_type_list IS TABLE OF bogus_type; v_bogus_list bogus_type_list; BEGIN SELECT bogus_type(t.ord_value, t.user_comment) BULK COLLECT INTO v_bogus_list FROM bogus_table t ORDER BY 1; FOR i IN 1..v_bogus_list.count LOOP dbms_output.put_line(v_bogus_list(i).ord_value ||' : '||v_bogus_list(i).user_comment); END LOOP; END;
Az eredmény pedig, a várakozásnak megfelelően, az ord_value alapján rendezett.
-1 : bla-1 1 : bla1 2 : bla2 3 : bla3
Cleanup.
DROP TABLE bogus_table; DROP TYPE bogus_type;