type example ejemplo dinamico array sql oracle plsql dereference varray

sql - example - type is record oracle ejemplo



Oracle PL/SQL: ¿Cómo DEREF de un VARRAY de REFs? (1)

el DEREF debe estar en una instrucción SQL: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#i463707

En PL / SQL, las funciones VALOR, REF y DEREF solo pueden aparecer en una instrucción SQL

esto funciona

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; /

buen caso de prueba para reproducirse!

Soy nuevo en Oracle Objects y tengo un problema. No sé cómo desreferenciar un artículo de un VARRAY de REF. A continuación se muestra un código fuente que reproduce el problema que tengo. El error es: PLS-00306: Número incorrecto o tipos de argumentos en la llamada a ''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; /

El error aparece en el procedimiento DISPLAY_LOCS, cuando trato de obtener el REF en la posición IDX del varray LOCS y de DEREF para obtener el nombre.