Академический Документы
Профессиональный Документы
Культура Документы
_________________________________________________________________________
ORACLE SQL y PL/SQL
1
Objetivos de la Leccin
En esta leccin, aprender mas detalles acerca de los tipos de datos compuestos y sus
usos.
_________________________________________________________________________
ORACLE SQL y PL/SQL
2
Los tipos de datos compuestos (tambin conocidos como colecciones) son Registro,
tabla, tabla anidada y Varray. Use el tipo de dato RECORD (registro) para tratar como una
unidad lgica, datos relacionados pero distintos. Use el tipo de dato TABLE (Tabla) para
manipular colecciones de datos como un solo objeto. Los tipos de datos de tablas
anidadas y VARRAY no son cubiertos en este curso.
Un registro es un grupo de elementos de datos relacionados, almacenados en campos,
cada uno con su propio nombre y tipo de datos. Una tabla contiene una columna y una
llave primaria que se utiliza para accesar a los registros. Una vez definido, las tablas y
registros pueden ser reutilizados.
_________________________________________________________________________
ORACLE SQL y PL/SQL
3
_________________________________________________________________________
ORACLE SQL y PL/SQL
4
Para crear un registro, defina un tipo RECORD y declare los registros de este tipo.
En la sintaxis,
type_name
field_name
field_type
tipo
de
dato
PL/SQL
excepto
REF
El constraint NOT NULL previene la asignacin del valor nulo a aquellos campos.
Asegrese de inicializar los campos no nulos.
_________________________________________________________________________
ORACLE SQL y PL/SQL
5
Las declaraciones de campos son como declaraciones de variables. Cada campo tiene un
nombre nico y un tipo de datos especfico. No hay ningn tipo de dato predefinido para
los registros de PL/SQL, como lo hay para variables escalares. Por lo tanto, debe crear el
tipo de dato primero y luego declarar un identificador que use este tipo de dato. El ejemplo
siguiente muestra que puede usar el atributo %TYPE para especificar el tipo de dato del.
Campo:
DECLARE
TYPE emp_record_type IS RECORD
(empno NUMBER(4) NOT NULL := 100,
ename emp.ename%TYPE,
job
emp.job%TYPE);
emp_record
emp_record_type;
...
Nota: Puedes agregar el constraint NOT NULL a cualquier declaracin de campo para
prevenir la asignacin de nulos al mismo. Sin embargo, todos los campos NOT NULL
tienen que ser inicializados.
_________________________________________________________________________
ORACLE SQL y PL/SQL
6
Los campos de un registro son accesados por su nombre. Para referir o inicializar un
campo individual, use el punto . y la siguiente sintaxis:
nombre_registro.nombre_campo
Por ejemplo, refirase al campo job en el registro emp_record as:
emp_record.job ...
Entonces, puede asignar un valor al campo de registro as:
emp_record.job := 'CLERK';
En un bloque o un subprograma, los registros definidos por el usuario son instanciados
cuando entra en ejecucin el bloque o el subprograma y dejan de existir cuando termina
el bloque o el subprograma.
Valores de Asignacin a Registros
Puede asignar una lista de valores comunes a un registro usando las sentencias SELECT
o FETCH. Asegrese de que los nombres de columna aparecen en el mismo orden que
los campos en su registro. Tambin puede asignar un registro a otro si tienen el mismo
tipo de datos. Un registro definido por usuario y un registro de %ROWTYPE nunca tienen
el mismo tipo de dato.
_________________________________________________________________________
ORACLE SQL y PL/SQL
7
Para declarar un registro basado en una coleccin de columnas de una tabla o vista de
base de datos, use el atributo de %ROWTYPE. Los campos en el registro toman sus
nombres y tipos de dato de las columnas de la tabla o la vista. El registro tambin puede
almacenar una fila entera de datos trados de una variable de cursor o un cursor.
En el ejemplo siguiente un registro es declarado usando %ROWTYPE como un tipo de
dato especfico.
DECLARE
emp_record
emp%ROWTYPE;
El registro emp_record, consistir en los siguientes campos, que reflejan todos las
columnas pertenecientes a la tabla EMP.
(ename
job
sal
comm
VARCHAR2(10),
VARCHAR2(9),
NUMBER,
NUMBER)
_________________________________________________________________________
ORACLE SQL y PL/SQL
8
DECLARE
identifier
Donde :
reference%ROWTYPE;
identifier
reference
_________________________________________________________________________
ORACLE SQL y PL/SQL
9
Ejemplos
La primera declaracin en la diapositiva crea un registro con los mismos nombres y tipos
de datos de los campos de la tabla de DEPT. Los campos son DEPTNO, DNAME, Y LA
LOCATION.
La segunda declaracin crea un registro con los mismos nombres y tipos de datos como
un registro de la tabla EMP. Los campos son EMPNO, ENAME, JOB, MGR, HIREDATE,
SAL, COMM, y DEPTNO.
En lo siguiente, selecciona valores de columna en un registro llamado item_record.
DECLARE
item_record item%ROWTYPE;
...
BEGIN
SELECT * INTO item_record
FROM
item
WHERE ...
_________________________________________________________________________
ORACLE SQL y PL/SQL
10
Los objetos tipo tabla son llamados tablas PL/SQL. Son modelados como (pero no son lo
mismo) tablas de la base de datos. Las tablas PL/SQL utilizan una llave primaria que
proporciona el acceso al contenido de la tabla.
Una tabla de PL/SQL:
_________________________________________________________________________
ORACLE SQL y PL/SQL
11
column_type
identifier
_________________________________________________________________________
ORACLE SQL y PL/SQL
12
El constraint NOT NULL previene que valores nulos sean asignados a los campos de la
tabla PL/ SQL para este tipo.
No inicialices la TABLE PL/SQL.
Declara una variable PL/SQL para almacenar la fecha.
DECLARE
TYPE date_table_type IS TABLE OF DATE
INDEX BY BINARY_INTEGER;
date_table date_table_type;
_________________________________________________________________________
ORACLE SQL y PL/SQL
13
Al igual que el tamao de una tabla de base de datos, el tamao de una tabla PL/SQL es
libre. Es decir el nmero de registros en una tabla PL/SQL puede aumentar
dinmicamente, entonces la tabla PL/SQL crece con las nuevas filas que son agregadas.
Las tablas de PL/SQL pueden tener una columna y una llave primaria, ninguna de las
cuales pueden ser nombradas. La columna puede pertenecer cualquier tipo de datos
escalar o un tipo de dato de registro, pero la llave primaria debe pertenecer al tipo
BINARY_INTEGER. No puede inicializar una tabla PL/SQL en su declaracin.
_________________________________________________________________________
ORACLE SQL y PL/SQL
14
No hay ningn tipo de dato predefinido para los registros de PL/SQL, tal como para las
variables escalares. Por lo tanto debe crear el tipo dato primero y luego declarar un
identificador que usa este tipo de dato.
Referenciando una tabla PL/SQL.
Sintaxis
pl/sql_table_name(primary_key_value)
Donde:
primary_key_value
_________________________________________________________________________
ORACLE SQL y PL/SQL
15
Debido a que solo es necesaria una tabla para alojar informacin de todos los registros
de una tabla de la base de datos, la tabla de registros aumenta la funcionalidad de tablas
PL/SQL.
Referenciando una tabla de registros
En el ejemplo de la diapositiva, te puedes referir a los campos de cada registro de la tabla
dept_table, ya que cada elemento de la tabla es un registro.
Sintaxis
table(index).field
Ejemplo
dept_table(15).location := 'Atlanta';
_________________________________________________________________________
ORACLE SQL y PL/SQL
16
_________________________________________________________________________
ORACLE SQL y PL/SQL
17
_________________________________________________________________________
ORACLE SQL y PL/SQL
18
_________________________________________________________________________
ORACLE SQL y PL/SQL
19
Ejecuta el script lab20_1.sql para crear una nueva tabla que almacene el nombre
(name
2.
top_dogs
salary
VARCHAR2(25),
NUMBER(11,2));
los empleados de la tabla EMP basado en los nmeros del empleado, guarda esta
informacin en la tabla PL/SQL.
a. Declara dos tablas PL/SQL, ENAME_TABLE y SAL_TABLE, para almacenar
temporalmente los nombres y los salarios.
b. Para cada nombre y salario regresados dentro del loop, almacenalos en las
tablas PL/SQL.
c. Termina el loop, transfiere los nombre y los salarios de las tablas PL/SQL dentro
de la tabla TOP_DOGS.
d. Vaca la tabla TOP_DOGS y prueba tu bloque.
Please enter the employee number: 7934
PL/SQL procedure successfully completed.
NAME
SALARY
--------------- --------MILLER
1300
SALARY
--------------- --------ADAMS
1100
_________________________________________________________________________
ORACLE SQL y PL/SQL
20