Está en la página 1de 20

Programación de bases de datos con PL /

SQL
6-2
Indexación de tablas de
registros

Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos.


Objetivos
•Esta lección cubre los siguientes objetivos:
-Crear una tabla INDEX BY
-Crear una tabla de registros INDEX BY
-Describir la diferencia entre registros, tablas y tablas de registros.

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 3
Propósito
•Ha aprendido que puede almacenar temporalmente un registro en
una sola variable, ya sea utilizando %ROWTYPE o un registro definido
por el usuario
•Sin embargo, hay ocasiones en las que necesita
almacenar temporalmente varias filas de datos
• Puede hacer esto al calcular promedios o acumular artículos
en un carrito de compras en línea antes de el registro de salida
• Estos se llaman colecciones

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 4
¿Qué es una colección?
•Una colección PL / SQL es un conjunto con nombre de muchas
ocurrencias del mismo tipo de datos almacenados como una
variable
•Una colección es un tipo de variable compuesta, similar a los registros
definidos por el usuario.
• Esta lección analiza las tablas INDEX BY y las tablas de registros
INDEX BY
• Hay otros tipos de variables de colección, por ejemplo, tablas
anidadas y varrays, pero están fuera del alcance de este curso.

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 5
¿Qué es una colección?
• Verá dos tipos de colecciones en esta lección:
-Una tabla INDEX BY, que se basa en un solo campo o columna;
por ejemplo, la columna last_name de la tabla EMPLOYEES
-Una tabla de registros INDEX BY, que se basa en un tipo de registro
compuesto; por ejemplo, la estructura de filas en la tabla
DEPARTMENTS
•Debido a que las colecciones son variables PL / SQL, se
almacenan en la memoria como otras variables PL / SQL

•No se almacenan en el disco como los datos en una tabla de base de


datos.

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 6
Una tabla INDEX BY tiene una clave principal

•Necesitamos poder hacer referencia a cada fila en una tabla INDEX BY


• Por lo tanto, cada tabla INDEX BY debe tener una clave primaria que
sirva como índice de los datos.
• La clave principal suele ser BINARY_INTEGER, pero puede ser
VARCHAR2

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 7
INDEX BY Estructura de la tabla

•La clave principal podría ser datos comerciales significativos


como una identificación de empleado

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 8
Declaración de una tabla INDEX BY

•Al igual que los registros definidos por el usuario, primero debe declarar
un tipo y luego declarar una variable de ese tipo
• La sintaxis es:
TYPE type_name IS TABLE OF DATA_TYPE
INDEX BY PRIMARY_KEY_DATA_TYPE;
identifier type_name;

•El siguiente ejemplo configura una tabla INDEX BY para contener todas
las fechas de contratación de la tabla EMPLOYEES

TYPE t_hire_date IS TABLE OF DATE


INDEX BY BINARY_INTEGER;
v_hire_date_tab t_hire_date;

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 9
Llenado de una tabla INDEX BY
•La sintaxis para completar la tabla INDEX BY es:
DECLARE
TYPE type_name IS TABLE OF DATA_TYPE
INDEX BY PRIMARY_KEY_DATA_TYPE;
identifier type_name;
BEGIN
FOR record IN (SELECT column FROM table)
LOOP
identifier(primary_key) := record.column;
END LOOP;
END;

•La clave principal se puede inicializar usando una columna única de


la tabla seleccionada o un entero creciente

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 10
Llenado de una tabla INDEX BY
• Este ejemplo rellena una tabla INDEX BY con la fecha de contratación de
los empleados que utilizan employee_id como clave principal

DECLARE
TYPE t_hire_date IS TABLE OF employees.hire_date%TYPE
INDEX BY BINARY_INTEGER;
v_hire_date_tab t_hire_date;
BEGIN
FOR emp_rec IN
(SELECT employee_id, hire_date FROM employees)
LOOP
v_hire_date_tab(emp_rec.employee_id) := emp_rec.hire_date;
END LOOP;
END;

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 11
Llenado de una tabla INDEX BY
•Este ejemplo rellena una tabla INDEX BY con la fecha de contratación de los
empleados y establece la clave principal usando una secuencia derivada de
incrementar v_count
DECLARE
TYPE t_hire_date IS TABLE OF employees.hire_date%TYPE
INDEX BY BINARY_INTEGER;
v_hire_date_tab t_hire_date;
v_count BINARY_INTEGER := 0;
BEGIN
FOR emp_rec IN
(SELECT hire_date FROM employees)
LOOP
v_count := v_count + 1;
v_hire_date_tab(v_count ) := emp_rec.hire_date;
END LOOP;
END;

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 12
Uso de métodos de tabla INDEX BY

•Puede utilizar procedimientos y funciones incorporados (llamados


métodos) para hacer referencia a elementos individuales de INDEX BY
tabla, o para leer elementos sucesivos
• Los métodos disponibles son:

•Utiliza estos métodos poniendo el prefijo de punto al nombre del


método con el nombre de la tabla.

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 13
Uso de métodos de tabla INDEX BY
•Este ejemplo demuestra el método COUNT
DECLARE
TYPE t_hire_date IS TABLE OF employees.hire_date%TYPE
INDEX BY BINARY_INTEGER;
v_hire_date_tab t_hire_date;
v_hire_date_count NUMBER(4);
BEGIN
FOR emp_rec IN
(SELECT employee_id, hire_date FROM employees)
LOOP
v_hire_date_tab(emp_rec.employee_id) := emp_rec.hire_date;
END LOOP;
DBMS_OUTPUT.PUT_LINE(v_hire_date_tab.COUNT);
END;

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 14
INDEX BY Tabla de registros
•Aunque una tabla INDEX BY solo puede tener un campo de datos, ese
campo puede ser un tipo de datos compuestos como un RECORD

•Esta es una tabla de registros INDEX BY


•El registro puede ser %ROWTYPE o un registro definido por el usuario
• Este ejemplo declara una tabla INDEX BY para almacenar filas
completas de la tabla EMPLOYEES:

DECLARE
TYPE t_emp_rec IS TABLE OF employees%ROWTYPE
INDEX BY BINARY_INTEGER;

v_employees_tab t_emprec;

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 15
INDEX BY Tabla de registros

•Se puede hacer referencia a los campos individuales dentro de una


tabla de registros agregando un valor de índice entre paréntesis
después del nombre de la tabla de registros

• Sintaxis: table(index).field
• Ejemplo: v_employees_tab (index) .hire_date
• El valor del índice en el ejemplo podría ser un valor real (por
ejemplo, 1, 5, 12, etc.) o una referencia a un valor
(v_emp_rec_tab.LAST)

PLSQL 6-2
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. dieciséis
Indexación de tablas deregistros
Uso de una tabla de registros INDEX BY
• Este ejemplo es similar al ejemplo anterior de la tabla INDEX BY, pero
almacena toda la fila EMPLOYEES y muestra el salario de cada fila.

DECLARE
TYPE t_emp_rec IS TABLE OF employees%ROWTYPE
INDEX BY BINARY_INTEGER;
v_emp_rec_tab t_emp_rec;
BEGIN
FOR emp_rec IN (SELECT * FROM employees) LOOP
v_emp_rec_tab(emp_rec.employee_id) := emp_rec;
DBMS_OUTPUT.PUT_LINE( v_emp_rec_tab(emp_rec.employee_id).salary);
END LOOP;
END;

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 17
Terminología

•Los términos clave utilizados en esta lección incluyen:


-Collection
-INDEX BY tabla
-INDEX BY tabla de registros

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 18
Resumen
•En esta lección, debería haber aprendido a:
-Crear una tabla INDEX BY
-Crear una tabla de registros INDEX BY
-Describir la diferencia entre registros, tablas y tablas de registros.

PLSQL 6-2
Indexación de tablas deregistros
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 19

También podría gustarte