Está en la página 1de 20

Traducido del inglés al español - www.onlinedoctranslator.

com

1
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.

2
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
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 3
Indexación de tablas de registros

3
Objetivo
• 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
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 4
Indexación de tablas de registros

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 son
fuera del alcance de este curso

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

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 base de datos.
mesa

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

Las tablas INDEX BY a veces se denominan "Matrices asociativas".

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 un VARCHAR2

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

7
ÍNDICE POR Estructura de la tabla

• La clave principal podría ser datos comerciales significativos


como una identificación de empleado

Clave primaria Valor

... ...

100 Jones

157 Herrero

135 Maduro

... ...
BINARY_INTEGER Escalar

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

La clave principal no es como una secuencia. Los valores no se generan automáticamente, sino que deben insertarse
específicamente. Por lo tanto, pueden faltar algunos valores, como muestra la diapositiva.

Aunque una tabla INDEX BY puede tener una clave principal VARCHAR2, un BINARY_INTERGER se usa con frecuencia para obtener una
velocidad más rápida y un almacenamiento más eficiente.

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:
ESCRIBE escribe un nombre ES TABLA DE DATA_TYPE
INDICE BY PRIMARY_KEY_DATA_TYPE;
identificador escribe un nombre;

• El siguiente ejemplo configura una tabla INDEX BY para


contener todas las fechas de contratación de la tabla EMPLOYEES

ESCRIBE t_hire_date ES TABLA DE FECHA


INDICE BY BINARY_INTEGER;
v_hire_date_tab t_hire_date ;

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

9
Llenado de una tabla INDEX BY
• La sintaxis para completar la tabla INDEX BY es:
DECLARAR
ESCRIBE escribe un nombre ES TABLA DE ÍNDICE DE
TIPO DE DATOS POR PRIMARY_KEY_DATA_TYPE;
identificador escribe un nombre;
EMPEZAR
POR registro EN (SELECCIONAR columna DE la tabla)
LOOP
identificador (clave_primaria): = registro. columna;
END LOOP;
FIN;

• La clave principal se puede inicializar usando una columna


única de la tabla seleccionada o un entero creciente

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

10
Llenado de una tabla INDEX BY
• Este ejemplo rellena una tabla INDEX BY con la contratación
fecha de los empleados que utilizan employee_id como clave
principal
DECLARAR
TIPO t_date_date ES TABLA DE empleados.contrata_fecha% TIPO
INDICE POR BINARY_INTEGER;
v_hire_date_tab t_hire_date;
EMPEZAR
PARA emp_rec IN
(SELECT employee_id, Hire_date FROM empleados) LOOP

v_hire_date_tab ( emp_rec.employee_id )
: = emp_rec.hire_date;
END LOOP;
FIN;

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

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
DECLARAR
TIPO t_date_date ES TABLA DE empleados.contrata_fecha% TIPO INDICE
POR BINARY_INTEGER;
v_hire_date_tab t_hire_date;
v_count BINARY_INTEGER: = 0;
EMPEZAR
PARA emp_rec IN
(SELECCIONE fecha_contratación DE los empleados)
BUCLE
v_count: = v_count + 1 ; v_hire_date_tab ( v_count ): =
emp_rec.hire_date;
END LOOP;
FIN;

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

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:
EXISTE PREVIO

CONTAR SIGUIENTE

PRIMERO ELIMINAR

ÚLTIMO PODAR

• Usas estos métodos poniendo un prefijo de punto al método-


nombre con el nombre de la tabla

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

EXISTS (n), PRIOR (n) y NEXT (n) toman un número de índice (n) correspondiente a una fila en la tabla INDEX
BY como parámetro.

TRIM y DELETE también pueden tomar parámetros.

13
Uso de métodos de tabla INDEX BY
• Este ejemplo demuestra el método COUNT
DECLARAR
TIPO t_date_date ES TABLA DE empleados.contrata_fecha% TIPO
INDICE POR BINARY_INTEGER;
v_hire_date_tab t_hire_date;
v_hire_date_count NÚMERO 4);
EMPEZAR
PARA emp_rec IN
(SELECT employee_id, Hire_date FROM empleados) LOOP

v_hire_date_tab (emp_rec.employee_id)
: = emp_rec.hire_date;
END LOOP;
DBMS_OUTPUT.PUT_LINE (v_hire_date_tab. CONTAR );
FIN;

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

El método COUNT devuelve el número de elementos de la tabla INDEX BY.

14
ÍNDICE POR 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:
DECLARAR
TIPO t_emp_rec ES TABLA DE empleados% ROWTYPE
INDICE BY BINARY_INTEGER;

v_employees_tab t_emprec;

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

15
ÍNDICE POR 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: tabla (índice) .field


• Ejemplo: v_employees_tab (index) .hire_date
• El valor de í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 de registros

dieciséis
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.
DECLARAR
TIPO t_emp_rec ES TABLA DE empleados% ROWTYPE
INDICE BY BINARY_INTEGER;
v_emp_rec_tab t_emp_rec;
EMPEZAR
PARA emp_rec IN ( SELECCIONE * FROM empleados)
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;
FIN;

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

17
Terminología
• Los términos clave utilizados en esta lección incluyen:
- Colección
- INDICE POR tabla
- INDICE POR tabla de registros

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

• Colección: un conjunto con nombre de múltiples ocurrencias del mismo tipo de datos

• Tabla INDEX BY: una colección que se basa en un solo campo o columna

• INDICE BY tabla de registros: una colección que se basa en un tipo de registro compuesto

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
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 19
Indexación de tablas de registros

19
20

También podría gustarte