Beruflich Dokumente
Kultur Dokumente
de la definicin de mtodos.
Un cuerpo (parte privada) dnde se implementan los mtodos definidos en la especificacin. Si un
RNDS: Evita que el mtodo pueda leer las tablas de la base de datos.
RNPS: Evita que el mtodo pueda leer las variables del paquete PL/SQL.
Cuerpo:
END nombreFuncion;
MEMBER FUNCTION nombreFuncion2(nomVar TIPO)
RETURN Tipo
IS
BEGIN
...
END nombreFuncion2;
MEMBER PROCEDURE nombreProcedimiento
IS BEGIN
...
END nombreProcedimiento;
END; /
apellidos varchar2(30),
fecha_nac date
);
/
Ejemplo de definicin de objetos con funciones y cuerpo:
Insercin de registros
Insercin de registros
idpersona number,
nombre varchar2(20)
);
Opcin 1:
ffabric date,
idpersona number
);
/
create table productos of producto_obj(
idproducto primary key,
constraint fk_prod_pers foreign key (idpersona) references clientes(idpersona)
);
/
insert into persona values(1, 'aitor');
insert into productos values(1, 'D700', sysdate, 1);
Ejemplo:
Ejemplo:
atributo1 TIPO1,
atributo2 TIPO2(n),
...
);
/
CREATE TYPE nombreColeccionObjeto
AS TABLE OF nombreTablaObjeto;
/
CREATE TABLE nombreTabla(
atributo1 TIPO1
atributo2 TIPO2,
tablaAnidada nombreColeccionObjeto)
NESTED TABLE tablaAnidada STORE AS nombre_tabla;
Ejemplo:
Seleccin:
id number,
nombre varchar2(10),
contactos contactosTB
) nested table contactos store as contactos_TN;
Insercin de registros:
Modificaremos el usuario con id=3. Cambiaremos el nombre del contacto que se apellida Ramos a Luisa.
update table(select us.contactos from usuarios us where us.id=3)
set nombre='Luisa' where apellidos='Ramos';
Se pueden definir valores por defecto en una columna de objeto tal y como hemos visto. Tambin es posible
realizar esta accin sobre una columna de tabla anidada o sobre un array.
Sobre el ejemplo anterior quedara de la siguiente manera.
CREATE TABLE empleados(
idempleado NUMBER PRIMARY KEY,
fecha_alta DATE DEFAULT SYSDATE,
persona personaNT DEFAULT personaNT(
persona_obj('Nombre1', 'Apellidos1', '07/05/1984'))
)NESTED TABLE persona STORE AS personas_tab;
Incluso podramos aadir como valor por defecto, a ms de una persona si las separamos mediante comas:
CREATE TABLE empleados(
...,
persona personaNT DEFAULT personaNT(
persona_obj('Nombre1', 'Apellidos1', '07/05/1984'),
persona_obj('Nombre2', 'Apellidos2', '18/06/1983'))
)NESTED TABLE persona STORE AS personas_tab;
Herencia
Para permitir la herencia entre objetos debemos especificar la opcin NOT FINAL en la creacin del objeto
para que otros objetos puedan heredar de l (valor por defecto). Si queremos que de un objeto no se pueda
heredar, debemos especificar FINAL. Lo mismo podemos hacer para los procedimientos o funciones miembro.
CREATE TYPE nombreSuperObj AS OBJECT(
nombreAtr TIPO,
... ,
FINAL MEMBER FUNCTION nombreFuncion1 RETURN NUMBER,
MEMBER FUNCTION nombreFuncion2 RETURN VARCHAR2
) NOT FINAL;
Para especificar que un objeto heredar de un objeto padre, se debe especificar la clausula UNDER. Si
adems queremos sobrescribir un mtodo debemos aadir la clausula OVERRIDING antes de MEMBER
(tanto en la especificacin como en el cuerpo del objeto) tal y como podemos ver a continuacin.
CREATE TYPE nombreSubObj UNDER nombreSuperObj(
nombreAtr TIPO,
... ,
OVERRIDING MEMBER FUNCTION nombreFuncion2 RETURN VARCHAR2
) FINAL;
Ejemplo
apellidos VARCHAR2(25),
MEMBER FUNCTION calc_sueldo_final RETURN NUMBER
) NOT FINAL;
/
CREATE OR REPLACE TYPE BODY empleado_obj AS
MEMBER FUNCTION calc_sueldo_final
RETURN NUMBER
IS
BEGIN
RETURN sueldo_base+sueldo_base*comision;
END calc_sueldo_final;
END;
/
CREATE TYPE ingeniero_obj UNDER empleado_obj(
num_proyectos NUMBER,
fecha_titulacion DATE
) FINAL;
/
CREATE TYPE arquitecto_obj UNDER empleado_obj(
extras NUMBER,
obras_realizadas NUMBER,
OVERRIDING MEMBER FUNCTION calc_sueldo_final RETURN NUMBER
) FINAL;
/