2017-05-05 38 views
0

我正在改变对象的体型。这里是我的代码:改变对象类型体[PL/SQL]

ALTER TYPE Profesor ADD CONSTRUCTOR FUNCTION Profesor(codigo INTEGER, nombre 
VARCHAR2, 
primerApellido VARCHAR2, segundoApellido VARCHAR2, especialidad VARCHAR2) 
RETURN SELF AS RESULT CASCADE; 
/
CREATE OR REPLACE TYPE BODY Profesor AS CONSTRUCTOR FUNCTION Profesor(codigo 
INTEGER, nombre VARCHAR2, 
primerApellido VARCHAR2, segundoApellido VARCHAR2, especialidad VARCHAR2) 
RETURN SELF AS RESULT IS 
BEGIN 
    SELF.codigo := codigo; 
    SELF.nombre := nombre; 
    SELF.apellidos := primerApellido||' '||segundoApellido; 
    SELF.especialidad := especialidad; 
    RETURN; 
END; 
END; 
/

我已经创建了对象,然后我改变它添加一个构造函数并创建一个类型的主体。 代码doesn't显示错误,但如果我尝试添加一个新方法它让我加的方法而不是去代码:

ALTER TYPE Profesor ADD MEMBER FUNCTION getNombreCompleto RETURN VARCHAR2 
CASCADE; 
/
ALTER TYPE BODY Profesor ADD MEMBER FUNCTION getNombreCompleto RETURN 
VARCHAR2 
CASCADE 
IS 
BEGIN 
RETURN SELF.nombre; 
END getNombreCompleto; 
END; 

而且that's的问题,我怎么可以改变的身型一个东西?

谢谢!

+0

为什么你想改变类型而不是使用“创建或替换”整个类型。 –

+0

因为如果我创建或替换整个类型的主体,它将替换所有的类型主体,丢弃构造函数的代码。 – EBG

+0

它并没有完全放下任何东西。您可以编辑源代码并运行它进行编译,与其他任何语言(如Java)相同。 –

回答

0

该解决方案应该可以工作。 Alter type member function\ constructor只适用于型号规格。对于身体,你必须重新创建身体。

ALTER TYPE Profesor ADD CONSTRUCTOR FUNCTION Profesor(codigo INTEGER, nombre 
VARCHAR2, 
primerApellido VARCHAR2, segundoApellido VARCHAR2, especialidad VARCHAR2) 
RETURN SELF AS RESULT CASCADE; 
/

ALTER TYPE Profesor ADD MEMBER FUNCTION getNombreCompleto RETURN VARCHAR2 
CASCADE; 
/
CREATE OR REPLACE TYPE BODY Profesor AS 
CONSTRUCTOR FUNCTION Profesor(codigo 
INTEGER, nombre VARCHAR2, 
primerApellido VARCHAR2, segundoApellido VARCHAR2, especialidad VARCHAR2) 
RETURN SELF AS RESULT IS 
BEGIN 
    SELF.codigo := codigo; 
    SELF.nombre := nombre; 
    SELF.apellidos := primerApellido||' '||segundoApellido; 
    SELF.especialidad := especialidad; 
    RETURN; 
END; 

MEMBER FUNCTION getNombreCompleto RETURN 
VARCHAR2 
CASCADE 
IS 
BEGIN 
RETURN SELF.nombre; 
END getNombreCompleto; 
END; 
END; 
/
+0

是的,它的工作原理。我认为有一种方法可以不重写所有的编写代码,并且在不重写所有主体类型的情况下添加新的方法。谢谢! – EBG