PL/SQL – Variables de tipo Registros
PL / SQL Un registro es una estructura de datos que puede contener elementos de datos de diferentes tipos. Los registros consisten en diferentes campos , de forma similar a una fila de una tabla de base de datos.
ID INT NOT NULL,
Nombre VARCHAR (20) NOT NULL,
Edad INT NOT NULL,
Direccion CHAR (25),
Salario DECIMAL (18, 2),
PRIMARY KEY (ID)
);
VALUES (1, ‘Ricardo’, 32, ‘Huaman’, 2000.00 );INSERT INTO Clientes (ID,nombre,edad,direccion,salario)
VALUES (2, ‘Juan’, 25, ‘Avila’, 1500.00 );
INSERT INTO Clientes (ID,nombre,edad,direccion,salario)
VALUES (3, ‘Aldo’, 23, ‘Laderas’, 2000.00 );
INSERT INTO Clientes (ID,nombre,edad,direccion,salario)
VALUES (4, ‘Victor’, 25, ‘Moreno’, 6500.00 );
INSERT INTO Clientes (ID,nombre,edad,direccion,salario)
VALUES (5, ‘Miguel’, 27, ‘Huaman’, 8500.00 );
INSERT INTO Clientes (ID,nombre,edad,direccion,salario)
VALUES (6, ‘Carlos’, 22, ‘Campos’, 4500.00 );
Registros Basados en Tabla – El atributo %ROWTYPE permite a un programador crear variables basadosen tablas.
DECLARE
Clientes_Reg Clientes%rowtype;
BEGIN
SELECT * INTO Clientes_Reg
FROM Clientes
WHERE id = 5;
dbms_output.put_line(‘Cliente ID: ‘ || Clientes_Reg.ID);
dbms_output.put_line(‘Cliente Nombre: ‘ || Clientes_Reg.NOMBRE);
dbms_output.put_line(‘Cliente Direccion: ‘ || Clientes_Reg.DIRECCION);
dbms_output.put_line(‘Cliente Salario: ‘ || Clientes_Reg.SALARIO);
END;
/
Cursor Basado en Registros – El siguiente ejemplo muestra el concepto de cursores basados en registros. Nosotros vamos a usar la tabla CLIENTES que habíamos creado anteriormente :
DECLARE
CURSOR Clientes_Cursor is
SELECT id, Nombre, Direccion
FROM Clientes;
Clientes_Reg Clientes_Cursor%rowtype;
BEGIN
OPEN Clientes_Cursor;
LOOP
FETCH Clientes_Cursor INTO Clientes_Reg;
EXIT WHEN Clientes_Cursor%notfound;
DBMS_OUTPUT.put_line(Clientes_Reg.id || ‘ ‘ || Clientes_Reg.Nombre);
END LOOP;
END;
/
PL/SQL proporciona un tipo de registro definido por el usuario que le permite definir diferentes estructuras de registro . Los registros consisten en diferentes campos. Supongamos que desea realizar un seguimiento de sus libros en una biblioteca. Es posible que desee realizar un seguimiento de los siguientes atributos acerca de cada libro :
DECLARE
type Libros is record
(Titulo varchar(50),
Autor varchar(50),
Asunto varchar(100),
ID number);
Libro1 Libros;
Libro2 Libros;
BEGIN
— Primer Libro
Libro1.Titulo := ‘Pl/Sql’;
Libro1.Autor := ‘Nuha Ali ‘;
Libro1.Asunto := ‘C Programming Tutorial’;
Libro1.ID := 6495407;
— Segundo Libro
Libro2.Titulo := ‘SQL Server 2014’;
Libro2.Autor := ‘Zara Ali’;
Libro2.Asunto := ‘Telecom Billing Tutorial’;
Libro2.ID := 6495700;
— Imprimir el primer registro
dbms_output.put_line(‘Libro 1 Titulo : ‘|| Libro1.Titulo);
dbms_output.put_line(‘Libro 1 author : ‘|| Libro1.Autor);
dbms_output.put_line(‘Libro 1 subject : ‘|| Libro1.Asunto);
dbms_output.put_line(‘Libro 1 book_id : ‘ || Libro1.ID);
— Imprimir el segundo registro
dbms_output.put_line(‘Libro 2 Titulo : ‘|| Libro2.Titulo);
dbms_output.put_line(‘Libro 2 author : ‘|| Libro2.Autor);
dbms_output.put_line(‘Libro 2 subject : ‘|| Libro2.Asunto);
dbms_output.put_line(‘Libro 2 book_id : ‘ || Libro2.ID);
END;
/
Puede pasar un registro como parámetro a un subprograma en forma muy similar a como se pasa cualquier otra variable . Se podría acceder a los campos de forma similar a la que ha accedido en el ejemplo anterior :
DECLARE
TYPE Libros is record
(Titulo varchar(50),
Autor varchar(50),
Asunto varchar(100),
ID number);
Libro1 Libros;
Libro2 Libros;
PROCEDURE imprimirbook (Libro Libros) IS
BEGIN
dbms_output.put_line(‘Libro Titulo : ‘|| Libro.Titulo);
dbms_output.put_line(‘Libro Author : ‘|| Libro.Autor);
dbms_output.put_line(‘Libro Asunto : ‘|| Libro.Asunto);
dbms_output.put_line(‘Libro ID : ‘ || Libro.ID);
dbms_output.put_line(RPAD(‘-‘, 50, ‘-‘));
END;
BEGIN
— Primer Libro
Libro1.Titulo := ‘Pl/Sql’;
Libro1.Autor := ‘Nuha Ali ‘;
Libro1.Asunto := ‘C Programming Tutorial’;
Libro1.ID := 6495407;
— Segundo Libro
Libro2.Titulo := ‘SQL Server 2014’;
Libro2.Autor := ‘Zara Ali’;
Libro2.Asunto := ‘Telecom Billing Tutorial’;
Libro2.ID := 6495700;
— Imprimir
imprimirbook (Libro1);
imprimirbook (Libro2);
END;
/