La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.

Presentaciones similares


Presentación del tema: "6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos."— Transcripción de la presentación:

1 6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos

2 Copyright © 2004, Oracle. Todos los derechos reservados. Objetivos Al finalizar esta lección, debería estar capacitado para lo siguiente: Crear registros PL/SQL definidos por el usuario Crear un registro con el atributo %ROWTYPE Crear una tabla INDEX BY Crear una tabla de registros INDEX BY Describir la diferencia entre registros, tablas y tablas de registros

3 Copyright © 2004, Oracle. Todos los derechos reservados. Tipos de Dato Compuestos Pueden contener varios valores, a diferencia de los tipos escalares Existen dos tipos: –Registros PL/SQL –Recopilaciones PL/SQL Matrices asociativas o tablas INDEX BY Tabla anidada VARRAY

4 Copyright © 2004, Oracle. Todos los derechos reservados. Tipos de Dato Compuestos Utilizar registros PL/SQL para almacenar valores de distintos tipos de dato, pero sólo una incidencia cada vez. Utilizar recopilaciones PL/SQL cuando desee almacenar valores del mismo tipo de dato.

5 Copyright © 2004, Oracle. Todos los derechos reservados. Registros PL/SQL Deben contener uno o más componentes de cualquier tipo de dato escalar, RECORD o de tabla INDEX BY, denominados campos Son similares a las estructuras en la mayoría de los lenguajes 3GL, incluidos C y C++ Están definidos por el usuario y pueden ser el subjuego de una fila en una tabla Tratan una recopilación de campos como una unidad lógica Resultan convenientes para recuperar una fila de datos de una tabla para su procesamiento

6 Copyright © 2004, Oracle. Todos los derechos reservados. Creación de un Registro PL/SQL Sintaxis: TYPE type_name IS RECORD (field_declaration[, field_declaration]…); field_name {field_type | variable%TYPE | table.column%TYPE | table%ROWTYPE} [[NOT NULL] {:= | DEFAULT} expr] identifiertype_name; 1 2 field_declaration:

7 Copyright © 2004, Oracle. Todos los derechos reservados. Creación de un Registro PL/SQL Declarar variables para almacenar el nombre, el trabajo y el salario de un nuevo empleado. Ejemplo:... TYPE emp_record_type IS RECORD (last_name VARCHAR2(25), job_id VARCHAR2(10), salary NUMBER(8,2)); emp_record emp_record_type;...

8 Copyright © 2004, Oracle. Todos los derechos reservados. Estructura de Registro PL/SQL Ejemplo: 100 King AD_PRES employee_id number(6)last_name varchar2(25)job_id varchar2(10) Campo 2 (tipo de dato)Campo 3 (tipo de dato)Campo 1 (tipo de dato) Campo 2 (tipo de dato)Campo 3 (tipo de dato)Campo 1 (tipo de dato)

9 Copyright © 2004, Oracle. Todos los derechos reservados. Atributo %ROWTYPE Declarar una variable según la recopilación de columnas en una vista o tabla de base de datos. Anteponer %ROWTYPE con la vista o tabla de base de datos. Los campos del registro toman los nombres y los tipos de dato de las columnas de la tabla o vista. DECLARE identifier reference%ROWTYPE; Sintaxis:

10 Copyright © 2004, Oracle. Todos los derechos reservados. Atributo %ROWTYPE Declarar una variable según la recopilación de columnas en una vista o tabla de base de datos. Anteponer %ROWTYPE con la tabla de base de datos. Los campos del registro toman los nombres y los tipos de dato de las columnas de la tabla o vista.

11 Copyright © 2004, Oracle. Todos los derechos reservados. Ventajas del Uso de %ROWTYPE No es necesario conocer el número y los tipos de dato de las columnas subyacentes de base de datos. Puede que el número y los tipos de dato de la columna subyacente de base de datos cambien en tiempo de ejecución. El atributo resulta útil al recuperar una fila con la sentencia SELECT *.

12 Copyright © 2004, Oracle. Todos los derechos reservados. Atributo %ROWTYPE... DEFINE employee_number = 124 DECLARE emp_rec employees%ROWTYPE; BEGIN SELECT * INTO emp_rec FROM employees WHERE employee_id = &employee_number; INSERT INTO retired_emps(empno, ename, job, mgr, hiredate, leavedate, sal, comm, deptno) VALUES (emp_rec.employee_id, emp_rec.last_name, emp_rec.job_id,emp_rec.manager_id, emp_rec.hire_date, SYSDATE, emp_rec.salary, emp_rec.commission_pct, emp_rec.department_id); END; /

13 Copyright © 2004, Oracle. Todos los derechos reservados. Inserción de un Registro mediante %ROWTYPE... DEFINE employee_number = 124 DECLARE emp_rec retired_emps%ROWTYPE; BEGIN SELECT employee_id, last_name, job_id, manager_id, hire_date, hire_date, salary, commission_pct, department_id INTO emp_rec FROM employees WHERE employee_id = &employee_number; INSERT INTO retired_emps VALUES emp_rec; END; / SELECT * FROM retired_emps;

14 Copyright © 2004, Oracle. Todos los derechos reservados. Actualización de una Fila en una Tabla mediante un Registro SET SERVEROUTPUT ON SET VERIFY OFF DEFINE employee_number = 124 DECLARE emp_rec retired_emps%ROWTYPE; BEGIN SELECT * INTO emp_rec FROM retired_emps; emp_rec.leavedate:=SYSDATE; UPDATE retired_emps SET ROW = emp_rec WHERE empno=&employee_number; END; / SELECT * FROM retired_emps;

15 Copyright © 2004, Oracle. Todos los derechos reservados. Matrices Asociativas o Tablas INDEX BY Son estructuras PL/SQL con dos columnas: –Cadena o entero de tipo de clave primaria –Columna de tipo de dato escalar o de registro No tienen límite en cuanto a tamaño. No obstante, el tamaño dependerá de los valores que pueda contener el tipo de dato clave.

16 Copyright © 2004, Oracle. Todos los derechos reservados. Creación de una Tabla INDEX BY Sintaxis: TYPE type_name IS TABLE OF {column_type | variable%TYPE | table.column%TYPE} [NOT NULL] | table%ROWTYPE [INDEX BY PLS_INTEGER | BINARY_INTEGER | VARCHAR2( )]; identifiertype_name;... TYPE ename_table_type IS TABLE OF employees.last_name%TYPE INDEX BY PLS_INTEGER;... ename_table ename_table_type; Declarar una tabla INDEX BY para almacenar los apellidos de los empleados.

17 Copyright © 2004, Oracle. Todos los derechos reservados. Creación de una Tabla INDEX BY

18 Copyright © 2004, Oracle. Todos los derechos reservados. Estructura de la Tabla INDEX BY Clave únicaValor... 1Jones 5Smith 3Maduro... PLS_INTEGER Escalar

19 Copyright © 2004, Oracle. Todos los derechos reservados. Creación de una Tabla INDEX BY DECLARE TYPE ename_table_type IS TABLE OF employees.last_name%TYPE INDEX BY PLS_INTEGER; TYPE hiredate_table_type IS TABLE OF DATE INDEX BY PLS_INTEGER; ename_table ename_table_type; hiredate_table hiredate_table_type; BEGIN ename_table(1) := 'CAMERON'; hiredate_table(8) := SYSDATE + 7; IF ename_table.EXISTS(1) THEN INSERT INTO...... END; /

20 Copyright © 2004, Oracle. Todos los derechos reservados. Uso de los Métodos de Tablas INDEX BY Los siguientes métodos facilitan el uso de las tablas INDEX BY : – PRIOR – NEXT – DELETE – EXISTS – COUNT – FIRST y LAST

21 Copyright © 2004, Oracle. Todos los derechos reservados. Tabla de Registros INDEX BY Defina una variable de tabla INDEX BY para contener una fila completa de una tabla. Ejemplo: DECLARE TYPE dept_table_type IS TABLE OF departments%ROWTYPE INDEX BY PLS_INTEGER; dept_table dept_table_type; -- Each element of dept_table is a record

22 Copyright © 2004, Oracle. Todos los derechos reservados. Tabla de Registros INDEX BY

23 Copyright © 2004, Oracle. Todos los derechos reservados. Ejemplo de Tabla de Registros INDEX BY SET SERVEROUTPUT ON DECLARE TYPE emp_table_type IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER; my_emp_table emp_table_type; max_count NUMBER(3):= 104; BEGIN FOR i IN 100..max_count LOOP SELECT * INTO my_emp_table(i) FROM employees WHERE employee_id = i; END LOOP; FOR i IN my_emp_table.FIRST..my_emp_table.LAST LOOP DBMS_OUTPUT.PUT_LINE(my_emp_table(i).last_name); END LOOP; END; /

24 Copyright © 2004, Oracle. Todos los derechos reservados. Tablas Anidadas 1 2 3 4.. 2 GB Bombay Sydney Oxford Londres....

25 Copyright © 2004, Oracle. Todos los derechos reservados. Tablas Anidadas

26 Copyright © 2004, Oracle. Todos los derechos reservados. Bombay Sydney Oxford Londres.... VARRAY Tokio 1 2 3 4.. 10

27 Copyright © 2004, Oracle. Todos los derechos reservados. Resumen En esta lección, debe haber aprendido lo siguiente: Definir y hacer referencia a variables PL/SQL de tipos de dato compuestos: –Registros PL/SQL –Tablas INDEX BY –Tabla de registros INDEX BY Definir un registro PL/SQL mediante el atributo %ROWTYPE

28 Copyright © 2004, Oracle. Todos los derechos reservados. Práctica 6: Visión General En esta práctica se abordan los siguientes temas: Declaración de las tablas INDEX BY Procesamiento de datos mediante las tablas INDEX BY Declaración de un registro PL/SQL Procesamiento de datos mediante un registro PL/SQL

29 Copyright © 2004, Oracle. Todos los derechos reservados.

30

31

32


Descargar ppt "6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos."

Presentaciones similares


Anuncios Google