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.