Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL
6-2
Indexación de 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
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
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
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
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;
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
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
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
• 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
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