更改对象类型主体[PL / SQL]

时间:2017-05-05 07:41:19

标签: plsql

我正在试图改变一个物体的体型。这是我的代码:

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

我创建了Object,然后我修改了它,添加了一个构造函数并创建了一个类型体。 代码没有显示错误但是如果我尝试添加一个新方法,它允许我添加方法而不是代码:

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;

问题是,如何改变物体的体型?

谢谢!

1 个答案:

答案 0 :(得分: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;
/