Inicio > Oracle > PL/SQL – Variables de tipo Registros

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.

Creamos una tabla clientes :
CREATE TABLE CLIENTES(
ID                INT NOT NULL,
Nombre     VARCHAR (20) NOT NULL,
Edad           INT NOT NULL,
Direccion  CHAR (25),
Salario       DECIMAL (18, 2),
   PRIMARY KEY (ID)
);
INSERT INTO Clientes (ID,nombre,edad,direccion,salario)
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;
/

VarRegistro001

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;
/

VarRegistro002

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;
/

Variables 003

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;
/

 

logo shipment4you 342 68 PNG ESP WEB

Categorías: Oracle
  1. No hay comentarios aún.
  1. No trackbacks yet.

Deja un comentario