Beruflich Dokumente
Kultur Dokumente
Semana 14 y 15
Construye programas avanzados utilizando el lenguaje PL/SQL en beneficio a la lógica del negocio.
MARCO TEÓRICO
El lenguaje utilizado para acceder a las bases de datos relacionales es el llamado Lenguaje Estructurado de Consulta (SQL,
Structured Query Language), que es muy flexible y transparente, es decir, sencillo y poderoso. SQL es un lenguaje de
cuarta generación, lo cual quiere decir que describe lo que quiere hacerse. Ayudará de manera factible al estudiante a
relacionar el mundo real con las bases de datos a desarrollar usando programación orientado a negocio.
PL / SQL es un lenguaje de procedimiento diseñado específicamente para incluir declaraciones SQL dentro de su
sintaxis. Las unidades de programa PL / SQL son compiladas por el servidor de Oracle Database y almacenadas dentro de
la base de datos. Y en tiempo de ejecución, tanto PL / SQL como SQL se ejecutan dentro del mismo proceso del servidor,
brindando una eficiencia óptima. PL / SQL hereda automáticamente la solidez, seguridad y portabilidad de la base de datos
Oracle.
RECURSOS
Hardware
Sistema. Oracle en Windows requiere un PC Intel x86, AMD64 o Intel EM64T
Memoria. Al menos 1 GB de RAM y el doble en virtual.
Espacio en disco duro. Al menos 6 GB para la instalación (algunas instalaciones requieren menos). Además,
necesitamos poder almacenar 500 MB en la carpeta TEMP del sistema.
Tarjeta gráfica. Debe de ser capaz de mostrar 1024 por 768 píxeles como mínimo y 256 colores.
Software
Sistema Operativo.
Windows 2003 Server y 2003 Server R2.
Windows XP Professional.
Windows Vista, pero no la versión Home Edition.
Windows Server 2008 y 2012. No la versión Server Core.
Compiladores. Se usan para la gente que crean aplicaciones en Oracle usando lenguajes como Pro C, Pro COBOL,
JAVA.
o Visual C++.NET 2005 8.0 o Intel 10.1 C, .Net Express.
Navegador. Para configurar algunos servicios de Oracle. Debe de ser navegador moderno (Internet Explorer 6 o
superior, Firefox 2.0 o superior, Safari 3.1 o superior, Chrome 3.0 o superior)
Usar dirección IP única en la máquina en la que se instala Oracle. Es decir, no usar DHCP para direccionar la IP
en el servidor de Oracle. No es un requisito obligatorio, pero es muy recomendable.
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
2
______________________________________________________________________
_________________________
DESCARGAR EL ARCHIVO Semana17_PL_SQL_1.sql,
ESTE SCRIPT CONTIENE LA ESTRUCTURA DE TABLAS DEL MODELO RELACIONAL.
Los TYPE de Oracle son tipos de datos que declara el usuario, y que puede ser utilizado para la declaración de variables,
tanto en procedimientos, como en funciones, o incluso en tablas.
Con el tiempo, los type de Oracle, han derivado en lo que en Java o C++ se denominan clases. Es decir que cada tipo está
formado por sus objetos y sus atributos:
Los objetos son variables, que a su vez pueden pertenecer a otros tipos.
Los atributos son procedimientos o funciones que pertenecen al type.
A parte, los type de Oracle tienen todas las características propias de la programación orientada a objetos:
Encapsulación: El type contiene dentro todos los objetos y atributos correspondientes, siendo estos últimos
transparentes para el usuario.
Herencia: Un type puede heredar todos los objetos y atributos de otro.
Polimorfismo: El type de Oracle, una vez heredado puede añadir nuevos objetos y atributos.
MODELO RELACIONAL.
IMPLEMENTACION PRIVADA.
Es aquí donde se crea la acción de los métodos, basado en una lógica de código.
Tablas de objetos.
Almacenan un objeto en cada fila y permiten acceder a los campos del objeto cómo si fueran columnas de la tabla
Las restricciones se definen sobre la tabla y se aplicarán SÓLO sobre aquellos objetos almacenados en dicha tabla
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
5
______________________________________________________________________
_________________________
Métodos.
Métodos MEMBER:
Los atributos son la columna o campo en el que se almacenan los datos. Cada atributo se asignará al tipo de datos que
define el tipo de procesamiento y almacenamiento para ese atributo. El atributo puede ser de cualquier tipo de datos PL /
SQL válido, o puede ser de otro tipo de objeto.
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
6
______________________________________________________________________
_________________________
Métodos STATIC:
Operaciones globales, que no son de los objetos, si no del tipo
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
7
______________________________________________________________________
_________________________
Constructores:
Cada vez que se crea un tipo de objeto, Oracle crea automáticamente un método constructor.
Podemos usar un tipo de objeto igual que cualquier otro tipo de dato.
Variable de Correlación.
Pero cuando trabajamos con UDTs es OBLIGATORIO utilizarlas para acceder a los campos del UDT
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
10
______________________________________________________________________
_________________________
Igual mente para acceder a los campos UDT por separado hay que utilizar las correlation variables
Cada fila de una tabla tipada (OR) tendrá un identificador del objeto fila OID
Para guardar esos identificadores Oracle utiliza un tipo REF
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
11
______________________________________________________________________
_________________________
Tipos referencia.
Cada fila (objeto fila) podrá ser referenciada como un objeto a través de su OID
De esta forma el almacenamiento ocupará menos espacio y el acceso será más eficiente
Operador Value:
Para obtener el objeto almacenado en una fila (y no sólo el valor de los campos de dicho objeto) se necesita la función
VALUE
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
14
______________________________________________________________________
_________________________
Gestión de Objetos
Al recuperar el objeto completo, se pueden realizar operaciones con él: modificarlo, insertarlo …
Ejemplos:
EJEMPLO 1:
Elaborar una clase con el Nombre Tipo_Cubo con los siguientes atributos y métodos.
Tipo_Cubo
Largo (int)
Ancho (int)
Alto (int)
Superficie ()
Volumen ()
Mostrar()
SOLUCION:
PASO 1:
Se crea la clase con sus respectivos atributos y métodos.
CREATE OR REPLACE TYPE Tipo_Cubo AS OBJECT (
Largo INTEGER,
Ancho INTEGER,
Alto INTEGER,
MEMBER FUNCTION Superficie RETURN INTEGER,
MEMBER FUNCTION Volumen RETURN INTEGER,
MEMBER PROCEDURE Mostrar);
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
15
______________________________________________________________________
_________________________
PASO 2:
Se procede a crear el cuerpo del Tipo_Cubo, es decir aquí se redacta el código del comportamiento de los métodos.
CREATE OR REPLACE TYPE BODY Tipo_Cubo AS
MEMBER FUNCTION Volumen RETURN INTEGER IS
BEGIN
RETURN Largo * Ancho * Alto;
-- RETURN SELF.largo * SELF.ancho * SELF.alto;
END;
PASO 3:
Se realizan la prueba usando bloque anónimo.
SET SERVEROUTPUT ON;
DECLARE
Proceso Tipo_Cubo;
BEGIN
Proceso:= Tipo_Cubo (10, 5, 5);
Proceso.mostrar;
END;
Resultados:
Eliminando el tipo.
DROP TYPE Tipo_Cubo FORCE;
PASO 1:
Se crea la clase con sus respectivos atributos y métodos
CREATE OR REPLACE TYPE Tipo_Triangulo AS OBJECT (
Base NUMBER,
Altura NUMBER,
MEMBER FUNCTION AreaT RETURN NUMBER,
MEMBER PROCEDURE Mostrar );
PASO 2:
Se procede a crear el cuerpo del Tipo_Triangulo, es decir, aquí se redacta el código del comportamiento de los métodos.
CREATE OR REPLACE TYPE BODY Tipo_Triangulo AS
Eliminando el tipo.
DROP TYPE Tipo_Triangulo FORCE;
FIN DEL EJEMPLO 2.
EJEMPLO 3:
Elaborar una clase con el Nombre Tipo_Cubo con los siguientes atributos y métodos, asociados a una tabla de datos Cubo.
Tipo_Cubo
Largo (Number)
Ancho (Number)
Alto (Number)
Superficie ()
Volumen ()
Mostrar() Cubo
Largo (Number)
Ancho (Number)
SOLUCION: Alto (Number)
PASO 1:
Se crea la clase con sus respectivos atributos y métodos
CREATE OR REPLACE TYPE Tipo_Cubo AS OBJECT (
Largo INTEGER,
Ancho INTEGER,
Alto INTEGER,
MEMBER FUNCTION Superficie RETURN INTEGER,
MEMBER FUNCTION Volumen RETURN INTEGER,
MEMBER PROCEDURE Mostrar );
PASO 2:
Se procede a crear el cuerpo del Tipo_Cubo, es decir, aquí se redacta el código del comportamiento de los métodos.
CREATE OR REPLACE TYPE BODY Tipo_Cubo AS
MEMBER FUNCTION Volumen RETURN INTEGER IS
BEGIN
RETURN Largo * Ancho * Alto;
-- RETURN SELF.largo * SELF.ancho * SELF.alto;
END;
PASO 4:
Verificamos la existencia de la tabla CUBOS.
SELECT * FROM Cubos;
Se obtendrá lo siguiente:
PASO 5:
Ahora insertamos 2 o más filas de datos en la tabla Cubos.
INSERT INTO Cubos VALUES (Tipo_Cubo (10, 10, 10));
INSERT INTO Cubos VALUES (Tipo_Cubo (3, 4, 5));
PASO 6:
Nueva mente verificamos el contenido de la tabla CUBO, para verificar la inserción.
SELECT * FROM Cubos;
PASO 7:
Ahora realizamos la primera prueba mediante la siguiente consulta.
SELECT c.volumen(), c.superficie () FROM cubos c
WHERE c.largo = 10;
Resultado:
PASO 8:
Segunda Prueba. Desde un bloque anónimo.
SET SERVEROUTPUT ON;
DECLARE
mi_cubo Tipo_Cubo;
BEGIN
-- Bloque PL/SQL para recuperar y mostrar la info de un cubo
SELECT VALUE(c) INTO mi_cubo FROM Cubos c
WHERE c.largo = 10;
mi_cubo.Mostrar ();
END;
Resultados:
PASO 9:
Eliminando el tipo y tabla.
DROP TYPE Tipo_Cubo FORCE;
DROP TABLE Cubo;
EJEMPLO 4:
Ejemplo de Herencia.
En este ejemplo se crea a la clase PERSONA, con los atributos CODIGO, NOMBRE y APELLIDO, son valores que la
clase va a capturar, y un método llamado GET_NOMBRECOMPLETO, el cual devuelve el nombre completo de la
persona.
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
20
______________________________________________________________________
_________________________
La clase EMPLEADO se extiende a la clase PERSONA, heredando sus atributos y métodos asociados.
La clase PERSONA está asociada a una tabla de datos con el nombre TEMPLEADO.
U N D E R (HERENCIA)
PERSONA
CODIGO (Number)
NOMBRE (Varchar2)
APELLIDO (Varchar2)
GET_NOMBRECOMPLETO EMPLEADO
SUELDO (Number)
SPU_ACTUALIZAR_SUELDO (PSUELDO NUMBER)
Alto (Number)
ASOCIADO A LA
TABLA
TEMPLEADO
CODIGO (Number)
NOMBRE (Varchar2)
APELLIDO (Varchar2)
SOLUCION:
PASO 1:
Creamos la clase PERSONA, con sus atributos y métodos asociados.
CREATE OR REPLACE TYPE PERSONA AS OBJECT
(
CODIGO NUMBER,
NOMBRE VARCHAR (20),
APELLIDO VARCHAR (25),
MEMBER FUNCTION GET_NOMBRECOMPLETO RETURN VARCHAR
) NOT FINAL;
1. Por default las clases son FINAL, lo cual indica que no permite usarse en herencias.
2. Asimismo podemos trabajar con herencia.
PASO 2:
Se procede a crear el cuerpo de la clase PERSONA. Programando el comportamiento de los métodos.
CREATE OR REPLACE TYPE BODY PERSONA IS
MEMBER FUNCTION GET_NOMBRECOMPLETO RETURN VARCHAR
IS
BEGIN
RETURN NOMBRE||' '||APELLIDO;
END;
END;
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
21
______________________________________________________________________
_________________________
PASO 3:
Crear la clase EMPLEADO con sus atributos y métodos asociados.
CREATE OR REPLACE TYPE EMPLEADO UNDER PERSONA
(
SUELDO NUMBER,
OVERRIDING MEMBER FUNCTION GET_NOMBRECOMPLETO RETURN VARCHAR,
MEMBER PROCEDURE SPU_ACTUALIZAR_SUELDO (PSUELDO NUMBER)
) NOT FINAL;
PASO 5:
Se procede a crear el cuerpo de la clase EMPLEADO. Con sus atributos, y Programando el comportamiento de los
métodos asociados.
CREATE OR REPLACE TYPE BODY EMPLEADO IS
PASO 6:
También está permitido polimorfismo. En los siguientes pasos crearemos una tabla basada en nuestro objeto EMPLEADO
y lo manipularemos.
El resultado es:
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
22
______________________________________________________________________
_________________________
Mediante una consulta solicitaremos información de nuestro objeto y tabla.
SELECT E.GET_NOMBRECOMPLETO(), E.* FROM TEMPLEADO E;
El resultado es:
Mediante un bloque anónimo solicitaremos información de nuestro objeto y tabla, y al mismo tiempo actualizaremos el
sueldo por 1000. De los 8000 que era antes.
SET SERVEROUTPUT ON
DECLARE
V_OBJETO EMPLEADO;
BEGIN
SELECT VALUE(E) INTO V_OBJETO FROM TEMPLEADO E;
V_OBJETO.SPU_ACTUALIZAR_SUELDO (1000);
DBMS_OUTPUT.PUT_LINE('EMPLEADO:'|| V_OBJETO.GET_NOMBRECOMPLETO());
DBMS_OUTPUT.PUT_LINE('SUELDO = '|| TO_CHAR(V_OBJETO.SUELDO));
END;
El resultado es:
Si hubiéramos creado la variable V_OBJETO como PERSONA, estaríamos trabajando con polimorfismo, de modo que la
variable se declara de una clase base y se crea con clases derivadas.
http://www.programandoapasitos.com/2016/02/acceso-datos-oracle-database-sintaxis-y.html
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
23
______________________________________________________________________
_________________________
CON RESPECTO A LA HERENCIA:
* Es la opción predeterminada.
Nota: Tampoco es válido para un método la combinación NOT INSTANTIABLE FINAL.
Si un subtipo no implementa métodos no instanciables heredados, debe ser a su vez un tipo no instanciable
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
25
______________________________________________________________________
_________________________
Principio de Sustitución: “Un objeto perteneciente a un supertipo puede ser remplazado por cualquiera de sus
subtipos”
Intuitivamente, en el ejemplo anterior: Todo profesor es una persona.
Lo contrario no siempre se cumple: Una persona no necesariamente es profesor.
Por eso a un objeto se le puede asignar un objeto subtipo, porque este puede proveer todos los atributos que exige
el supertipo.
Este proceso también se denomina “widening” (ampliación)
Insertamos algunos registros, en las diferentes clases, por intermedio de la tabla PERSONA.
INSERT INTO persona VALUES (101,'Lauren Mayberry');
INSERT INTO persona VALUES (persona_type (201,'Hayley Williams'));
--SORPRESA
INSERT INTO persona values (profesor_type (301,'Adam Duritz', 55));
INSERT INTO persona values (profplanta_type (6,'Matt Goss', 95, 15));
INSERT INTO persona values (profcat_type (61,'George Michael', 52, 10));
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
26
______________________________________________________________________
_________________________
Verificamos el contenido.
--No se ven los atributos exclusivos del profesor...
SELECT * FROM persona;
CODIGO ORIGINAL:
REALIZANDO PRUEBAS.
--SI LA TABLA EXISTE, LA ELIMINAMOS.
DROP TABLE figura;
--INSERTAMOS UN REGISTRO
INSERT INTO figura VALUES ('Figura 1');
EL RESULTADO:
Guía de Laboratorio
Programación en Base de Datos – Programación PL/SQL VI
31
______________________________________________________________________
_________________________
--SI LA TABLA EXISTE, LA ELIMINAMOS.
DROP TABLE circulo;
--INSERTAMOS UN REGISTRO
INSERT INTO circulo VALUES ('circulo 1',10);
EL RESULTADO:
EL RESULTADO:
EL RESULTADO:
IMPORTANTE
ELABORE EL MODELO DE TIPO DE DATOS EN ESTE ARCHIVO
S17_PL_SQL_2.sql,
FAVOR DE DESCARGAR DICHO ARCHIVO Y LUEGO, DESARROLLAR LOS CASOS, FINALICE
SUBIENDO NUEVAMENTE EL ARCHIVO.
RESOLVER: