Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

Crear una tabla de objetos en Oracle

Vamos a ver en éste post cómo crear una tabla de objetos en Oracle. Para ello, vamos a crear primero un objeto y sobre ése objeto construiremos una tabla que contendrá en unos de sus campos al citado objeto.
Crear una tabla de objetos en Oracle

Tomaremos como ejemplo el objeto "direccionOBJ" que es una dirección postal:
CREATE OR REPLACE TYPE direccionOBJ as OBJECT
(
   calle VARCHAR2(20),
   ciudad VARCHAR2(20),
   codProvincia CHAR(2),
   cPostal CHAR(5)
);
Ahora creamos una tabla de empleado, que contiene al objeto direccion (de tipo direccionOBJ):
CREATE TABLE empleado 
(
  numEmpleado   NUMBER(3),
  nombre VARCHAR2(20),
  direccion direccionOBJ
);
Vamos a crear ahora una fila para nuestra tabla de empleados:
INSERT INTO empleado VALUES 
(139, 'Antonio', direccionOBJ('Calle Sierpes','Sevilla','41','41001'));

Crear una tabla a partir de un objeto Oracle 

A continuación vamos a crear una tabla oracle con los objetos direccionOBJ y vamos a copiar todas las direcciones de nuestra tabla de empleados a ésta tabla:
CREATE TABLE tabla_direcciones OF direccionOBJ;
Insertamos las direcciones:
INSERT INTO tabla_direcciones 
    SELECT e.direccion
    FROM empleados e;
Así hemos transformado el objeto direccionesOBJ en una tabla que podemos consultar. Vamos a hacer un "select" de nuestra tabla:
SELECT ciudad FROM tabla_direcciones
Ya ésta, así de simple... (o de difícil) ;)
spacer

Crear y recorrer un cursor de Oracle

Crear y recorrer un cursor de oracle
Dejo en este post cómo crear un cursor oracle sobre una consulta para recorrerlo después:

-- Zona de declaración 
declare
-- Declaramos el cursor sobre una consulta de una supuesta tabla usuarios.

cursor usuarios is 
    select * 
    from usuarios
    where edad > 20;

-- Fin declaración. Comenzamos el procedimento:

begin

-- Recorremos el cursor con un bucle for - loop
    for u in usuarios loop
        dbms_output.put_line(u.apellidos||' '||u.nombre);
    end loop; 
-- Fin bucle

end; 
-- Fin procedimiento



La función dbms_output.put_line muestra por pantalla el resultado en la variable "u" con la que recorremos el cursor. El operador || es de concatenación de cadenas.

Quizás te interese...

spacer

Paquetes (package) en Oracle

Los paquetes en Oracle sirven para agrupar y organizar funcionalidades en una base de datos. Son estructuras que agrupan objetos PL/SQL (funciones, procedimientos, tipos, etc.). Ello nos va a permitir tener programas estructurados agrupados por funcionalidades.
Un paquete de Oracle se compone de dos elementos: 
  • La especificación (cabecera) y
  • El cuerpo
La especificación es la interfaz de las funciones y procedimientos que se van a implmentar en el cuerpo, es algo parecido a las cabeceras en el lenguaje de programación C. La sintaxis general es la siguiente:
CREATE [OR REPLACE] PACKAGE <nombre_del_paquete> is 

  -- Declaración de tipos:
  TYPE <nombreTipo> IS <tipo>;

  -- Declaracion de variables y constantes
  <nombreConstante> CONSTANT <tipo> := <valor>;
  <nombreVariable> <tipo>;

  -- Declaraciones de funciones y procedimientos
  FUNCTION <nombreFuncion>(<parametro> <tipo>,...) RETURN <tipo>;
  PROCEDURE <nombreProcedimiento>(<parametro> <tipo>, ...);

END <nombre_del_paquete>


El cuerpo no es más que la implementación de la especificación que hemos realizado. Por tanto, el cuerpo del paquete debe implementar lo que se ha declarado en la especificación. La sintaxis del cuerpo es parecida a la de la especificación, con la diferencia de que incluimos la implementación de cada procedimiento y función. Declaramos el cuerpo con la palabra clave BODY. La sintaxis general es la siguiente:
CREATE [OR REPLACE] PACKAGE BODY <nombre_del_paquete> IS
   
  -- Declaraciones de tipos y registros privados
  TYPE <TypeName> IS <tipo>;
  
  -- Declaraciones de variables y constantes privadas
  <nombreConstante> CONSTANT <tipo> := <valor>;
  <nombreVariable> <tipo>;

  -- Implementacion de procedimientos y funciones 
  FUNCTION <nombreFuncion>(<parametro> <tipo>,...) RETURN <tipo> IS
    -- Variables locales de la funcion
  BEGIN
    -- Implementación de la función
    return <resultado>;
  [EXCEPTION]
    -- Control de excepciones
  END;
  
  PROCEDURE <nombreProcedimiento>(<parametro> <tipo>, ...) IS 
   -- Variables locales del procedimiento
  BEGIN
    -- Implementacion de procedimiento
  [EXCEPTION]
    -- Control de excepciones
  END;

END <nombre_del_paquete>;


Espero que os sirva, próximamente escribiré sobre procedimientos y funciones con algunos ejemplos.

Un saludo!
spacer