Oracle - Problema con "member function"

 
Vista:

Problema con "member function"

Publicado por Diclonius (1 intervención) el 22/07/2005 21:44:14
Hola, estoy empezando a trabajar con objetos en Oracle8i, y tengo un problema al tratar de actualizar una propiedad del objeto.

Por ejemplo si trabajo con un procedimiento, el procedimiento puede actualizar la propiedad miembro del objeto

********************** FUNCIONA **************************

CREATE OR REPLACE TYPE TO_TEST_P AS OBJECT
( CAMPO1 NUMBER(15,5),
MEMBER PROCEDURE CHANGE_CAMPO1);

CREATE OR REPLACE TYPE BODY TO_TEST_P AS
MEMBER PROCEDURE CHANGE_CAMPO1 IS
BEGIN
CAMPO1:=7;
RETURN;
END CHANGE_CAMPO1;
END;

DECLARE
OBJETO TO_TEST_P;
BEGIN
OBJETO:=TO_TEST_P(1);
OBJETO.CHANGE_CAMPO1;
dbms_output.put_line('El procedimiento cambio el valor de la propiedad Campo1 a:['||Objeto.Campo1||']');
END;

***************************************************************

Pero si quisiera actualizar el dato con una funcion, me da error , probe tambien creando un procedimiento para que la funcion llamara al procedimiento y este actualizara, pero tampoco funciona.. es que acaso las funciones no pueden alterar datos del objeto?
Si pongo en comentario la linea que actualiza el campo, la funcion trabaja sin problemas.
Y obviamente no quiero actualizar el campo fuera del objeto ya que pierdo la encapsulacion.

************ NO FUNCIONA ****************************

CREATE OR REPLACE TYPE TO_TEST_F AS OBJECT
( CAMPO1 NUMBER(15,5),
MEMBER FUNCTION CHANGE_CAMPO1 RETURN NUMBER);

CREATE OR REPLACE TYPE BODY TO_TEST_F AS
MEMBER FUNCTION CHANGE_CAMPO1 RETURN NUMBER IS
BEGIN
CAMPO1:=8; -- Si se comentaria esta linea funciona.
RETURN 2;
END CHANGE_CAMPO1;
END;

DECLARE
OBJETO TO_TEST_F;
RESULT NUMBER;
BEGIN
OBJETO:=TO_TEST_F(1);
RESULT:=OBJETO.CHANGE_CAMPO1;
dbms_output.put_line('La funcion cambio el valor de la propiedad Campo1 a :['||Objeto.Campo1||']');
END;

**************************************************************
El Error que arroja es

ORA-04068: existing state of packages has been discarded
ORA-04063: stored procedure "SWBAPPS.TO_TEST_F" has errors
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 6


Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder