Oracle map member function

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; 

Hozzászólás