7 Tipos de Datos Compuestos Copyright Oracle Corporation, 1998. All rights reserved. Objetivos Al ón, usted á: Al final final de de esta esta lecci lección, usted podr podrá: •• Crear Crear registros registros PL/SQL PL/SQL definidos definidos por por el el usuarios usuarios •• Crear Crear un un registro registro con con el el atributo atributo %ROWTYPE %ROWTYPE •• Crear Crear una una tabla tabla PL/SQL PL/SQL •• Crear Crear una una tabla tabla PL/SQL PL/SQL de de registros registros •• Describir Describir la la diferencia diferencia entre entre registros, registros, tablas tablas yy tablas tablas de de registros registros 7-2 Copyright Oracle Corporation, 1998. All rights reserved. Tipos de Datos Compuestos •• Tipos: Tipos: –– REGISTROS REGISTROS PL/SQL PL/SQL –– TABLAS TABLAS PL/SQL PL/SQL •• Contienen Contienen componentes componentes internos. internos. •• Son Son reutilizables. reutilizables. 7-3 Copyright Oracle Corporation, 1998. All rights reserved. Registros PL/SQL •• Deben Deben contener contener uno uno o o más más componentes componentes de de cualquier cualquier campo campo llamado llamado tipo tipo dde dde datos datos escalar, escalar, REGISTRO REGISTRO o o TABLA TABLA PL/SQL. PL/SQL. •• Must Must contain contain one one or or more more components components of of any any scalar, scalar, RECORD, RECORD, or or PL/SQL PL/SQL TABLE TABLE datatypedatatypecalled called fields. fields. •• Son Son similares similares en en estructura estructura aa los los registros registros de de un un 3GL. 3GL. •• No No son son lo lo mismo mismo que que las las filas filas de de una una tabla tabla de de base base de de datos. datos. •• Tratan Tratan una una colección colección de de campos campos como como una una Copyright Oracle Corporation, 1998. All rights reserved. 7-4 unidad unidad lógica. lógica. Creación de un REGISTRO PL/SQL Sintaxis Sintaxis TYPE TYPE type_name type_name IS IS RECORD RECORD (field_declaration[, (field_declaration[, field_declaration]…); field_declaration]…); Donde Donde field_declaration field_declaration significa significa field_name field_name {field_type {field_type || variable%TYPE variable%TYPE || table.column%TYPE table.column%TYPE || table%ROWTYPE} table%ROWTYPE} [[NOT [[NOT NULL] NULL] {:= {:= || DEFAULT} DEFAULT} expr] expr] 7-5 Copyright Oracle Corporation, 1998. All rights reserved. Creación de un Registro PL/SQL Declare Declare variables variables para para almacenar almacenar el el nombre, nombre, trabajo trabajo yy sueldo sueldo de de un un empleado empleado nuevo. nuevo. Ejemplo Ejemplo ... ... TYPE TYPE emp_record_type emp_record_type IS IS RECORD RECORD (ename VARCHAR2(10), (ename VARCHAR2(10), job VARCHAR2(9), job VARCHAR2(9), sal NUMBER(7,2)); sal NUMBER(7,2)); emp_record emp_record_type; emp_record emp_record_type; ... ... 7-6 Copyright Oracle Corporation, 1998. All rights reserved. Estructura del Registro PL/SQL Campo1 Campo2 (tipo de datos) (tipo de datos) Campo3 (tipo de datos) Ejemplo Ejemplo Campo1 (tipo de datos) empno number(4) 7-7 Campo2 (tipo de datos) ename varchar2(10) Campo3 (tipo de datos) job varchar2(9) Copyright Oracle Corporation, 1998. All rights reserved. El Atributo %ROWTYPE •• Declare Declare una una variable variable de de acuerdo acuerdo con con una una colección colección de de columnas columnas de de una una vista vista o o tabla tabla de de base base de de datos. datos. •• Encabece Encabece %ROWTYPE %ROWTYPE con con la la tabla tabla de de base base de de datos. datos. •• Los Los campos campos del del registro registro toman toman sus sus nombres nombres yy tipos tipos de de datos datos de de las las columnas columnas de de la la tabla tabla o o la la vista. vista. 7-8 Copyright Oracle Corporation, 1998. All rights reserved. Ventajas de la Utilización de %ROWTYPE •• El El número número yy los los tipos tipos de de datos datos de de las las columnas columnas de de la la base base de de datos datos subyacente subyacente pueden pueden no no ser ser conocidos. conocidos. •• El El número número yy los los tipos tipos de de datos datos de de la la columna columna de de la la base base de de datos datos subyacente subyacente puede puede cambiar cambiar en en el el momento momento de de la la ejecución. ejecución. •• Es Es útil útil para para recuperar recuperar una una fila fila con con la la sentencia sentencia SELECT. SELECT. 7-9 Copyright Oracle Corporation, 1998. All rights reserved. El Atributo %ROWTYPE Ejemplos Ejemplos Declare Declare una una variable variable para para almacenar almacenar la la misma ón sobre misma informaci información sobre un un departamento á almacenada departamento que que est está almacenada en en la la tabla tabla DEPT. DEPT. dept_record dept_record dept%ROWTYPE; dept%ROWTYPE; Declare Declare una una variable variable para para almacenar almacenar la la misma ón sobre misma informaci información sobre un un empleado empleado que á almacenada que est está almacenada en en la la tabla tabla EMP. EMP. emp_record emp_record 7-10 emp%ROWTYPE; emp%ROWTYPE; Copyright Oracle Corporation, 1998. All rights reserved. Tablas PL/SQL •• Cuentan Cuentan con con dos dos componentes: componentes: –– Tipo Tipo de de datos datos de de clave clave primaria primaria BINARY_INTEGER BINARY_INTEGER –– Columna Columna de de tipos tipos de de datos datos escalares escalares o o de de registro registro •• Aumentan Aumentan dinámicamente dinámicamente porque porque no no tienen tienen restricciones restricciones 7-11 Copyright Oracle Corporation, 1998. All rights reserved. Creación de una Tabla PL/SQL Sintaxis Sintaxis TYPE TYPE type_name type_name IS IS TABLE TABLE OF OF {column_type {column_type || variable%TYPE variable%TYPE || table.column%TYPE} table.column%TYPE} [NOT [NOT NULL] NULL] INDEX INDEX BY BY BINARY_INTEGER; BINARY_INTEGER; identifier identifier type_name; type_name; Declare Declare una una variable variable PL/SQL PL/SQL para para almacenar almacenar un un nombre. nombre. Ejemplo Ejemplo ... ... TYPE TYPE ename_table_type ename_table_type IS IS TABLE TABLE OF OF emp.ename%TYPE emp.ename%TYPE INDEX INDEX BY BY BINARY_INTEGER; BINARY_INTEGER; ename_table ename_table ename_table_type; ename_table_type; ... ... 7-12 Copyright Oracle Corporation, 1998. All rights reserved. Estructura de la Tabla PL/SQL 7-13 Clave Principal Columna ... ... 1 Jones 2 Smith 3 Maduro ... ... BINARY_INTEGER Escalar Copyright Oracle Corporation, 1998. All rights reserved. Creación de una TABLA PL/SQL DECLARE DECLARE TYPE TYPE ename_table_type ename_table_type IS IS TABLE TABLE OF OF emp.ename%TYPE emp.ename%TYPE INDEX INDEX BY BY BINARY_INTEGER; BINARY_INTEGER; TYPE TYPE hiredate_table_type hiredate_table_type IS IS TABLE TABLE OF OF DATE DATE INDEX INDEX BY BY BINARY_INTEGER; BINARY_INTEGER; ename_table ename_table_type; ename_table ename_table_type; hiredate_table hiredate_table hiredate_table_type; hiredate_table_type; BEGIN BEGIN ename_table(1) ename_table(1) := := 'CAMERON'; 'CAMERON'; hiredate_table(8) hiredate_table(8) := := SYSDATE SYSDATE ++ 7; 7; IF IF ename_table.EXISTS(1) ename_table.EXISTS(1) THEN THEN INSERT INSERT INTO INTO ... ... ... ... END; END; 7-14 Copyright Oracle Corporation, 1998. All rights reserved. TABLA PL/SQL de REGISTROS •• Defina Defina una una variable variable TABLA TABLA con con el el atributo atributo %ROWTYPE. %ROWTYPE. •• Declare Declare una una variable variable PL/SQL PL/SQL que que contenga contenga información información del del departamento. departamento. Ejemplo Ejemplo DECLARE DECLARE TYPE TYPE dept_table_type dept_table_type IS IS TABLE TABLE INDEX INDEX BY BY BINARY BINARY INTEGER; INTEGER; dept_table dept_table dept_table_type; dept_table_type; --- Each Each element element of of dept_table dept_table 7-15 OF OF dept%ROWTYPE dept%ROWTYPE is is aa record record Copyright Oracle Corporation, 1998. All rights reserved. Resumen Defina Defina yy haga haga referencia referencia aa variables variables PL/SQl PL/SQl De De tipos tipos de de datos datos compuestos: compuestos: •• Registros Registros PL/SQL PL/SQL •• Tablas Tablas PL/SQL PL/SQL •• Tabla Tabla PL/SQL PL/SQL de de registros registros Defina Defina un un Registro Registro PL/SQL PL/SQL utilizando utilizando el el atributo atributo %ROWTYPE. %ROWTYPE. 7-16 Copyright Oracle Corporation, 1998. All rights reserved. Visión General de la Práctica •• Declaración Declaración de de tablas tablas PL/SQL PL/SQL •• Procesamiento Procesamiento de de datos datos utilizando utilizando tablas tablas PL/SQL PL/SQL 7-17 Copyright Oracle Corporation, 1998. All rights reserved.