Oracle PL / SQL: как DEREF из VARRAY REF?

Я новичок в Oracle Objects, и у меня есть проблема. Я не знаю, как разыменовать элемент из VARRAY of REF. Ниже приведен некоторый исходный код, который воспроизводит проблему, которая у меня есть. Ошибка: PLS-00306: неправильное количество или типы аргументов при вызове 'DEREF'

DROP TYPE LOC FORCE / DROP TYPE LIST_LOC FORCE / DROP TYPE PIZ FORCE / CREATE OR REPLACE TYPE LOC AS OBJECT( NAME VARCHAR2(30), MEMBER FUNCTION GET_NAME RETURN VARCHAR2 ) / CREATE OR REPLACE TYPE BODY LOC AS MEMBER FUNCTION GET_NAME RETURN VARCHAR2 IS BEGIN RETURN SELF.NAME; END; END; / CREATE OR REPLACE TYPE LIST_LOC AS VARRAY(10) OF REF LOC / CREATE OR REPLACE TYPE PIZ AS OBJECT( LOCS LIST_LOC, MEMBER PROCEDURE DISPLAY_LOCS ) / CREATE OR REPLACE TYPE BODY PIZ AS MEMBER PROCEDURE DISPLAY_LOCS IS BEGIN FOR IDX IN SELF.LOCS.FIRST..SELF.LOCS.LAST LOOP DBMS_OUTPUT.PUT_LINE(DEREF(SELF.LOCS(IDX)).GET_NAME()); --this is the line that generates the error END LOOP; END; END; / 

Ошибка появляется в процедуре DISPLAY_LOCS, когда я пытаюсь получить REF в позиции IDX из LOCS varray и DEREF, чтобы получить имя.

DEREF должен находиться в SQL-заявлении: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#i463707

В PL / SQL функции VALUE, REF и DEREF могут отображаться только в инструкции SQL

это работает

 CREATE OR REPLACE TYPE BODY PIZ AS MEMBER PROCEDURE DISPLAY_LOCS IS x varchar2(30) ; BEGIN FOR IDX IN SELF.LOCS.FIRST..SELF.LOCS.LAST LOOP select DEREF(SELF.LOCS(IDX)).GET_NAME() into x from dual ; DBMS_OUTPUT.PUT_LINE(x); --this is the line that generates the error END LOOP; END; END; / 

хороший тестовый случай для воспроизведения!