Sei sulla pagina 1di 4

BLOQUES ANONIMOS - PARTE II

OBJETIVOS:

Construir bloques anónimos en los cuales se utilizan variables con el atributo %TYPE y variables
RECORD.

DECLARACÓN CON %ROWTYPE

Es típico en el trabajo con BD el declarar registros con el mismo formato que las filas de las tablas.
Si se conoce la estructura de las tablas se crea un registro con ese formato, si no se utiliza el
operador %ROWTYPE, similar a %TYPE. El registro tendrá los mismos campos y del mismo tipo
que la tupla de la tabla correspondiente de la BD.

Los campos del registro toman sus nombres y tipos de datos de las columnas de la vista o
tabla.

Ventajas de %ROWTYPE
 El número y los tipos de datos de las columnas de la tabla pueden no ser conocidos.
 Simplifica la programación al no tener que definir explícitamente los campos y tipos del
registro.
 Es útil para realizar recuperaciones de filas con la sentencia SELECT:

DECLARE

reg_cliente clientes%ROWTYPE;

BEGIN

SELECT *
INTO reg_cliente FROM clientes
WHERE codigo = 1 ;

DBMS_OUTPUT.PUT_LINE('El codigo del cliente'|| reg_cliente.codigo||'y su nombre'||


reg_cliente.nombre);

END;
Variable tipo compuesto RECORD

Se les conoce como Registros PL/SQL o Record, se utilizan para tratar datos relacionados pero
distintos como unidades lógicas. Un registro PL/SQL puede tener variables de diferentes tipos. Por
ejemplo, puede definir un registro para incluir los detalles de empleado. Esto implica el
almacenamiento del número de empleado como NUMBER, el nombre y apellido como VARCHAR2,
etc. Al crear un registro para almacenar los detalles de empleado, se crea una unidad colectiva lógica.
Esto facilita la manipulación de los datos en cuanto al acceso, modificación, relacionarlos y
transportarlos.

Se utilizan los registros PL/SQL cuando desee almacenar valores de diferentes tipos de dato que
están relacionados de forma lógica. Si crea un registro para incluir los detalles de empleado,
identifique que todos los valores almacenados están relacionados porque proporcionan información
acerca de un empleado determinado.

TENGA EN CUENTA

Sabiendo que un registro es un grupo de elementos de datos relacionados almacenados en


campos, cada uno con su propio nombre y tipo de dato.

 Cada registro definido puede tener tantos campos como sean necesarios.
 Se pueden asignar valores iniciales a los registros y éstos se pueden definir como NOT NULL.
 Los campos sin valores iniciales se inicializan en NULL.
 Puede definir los tipos RECORD y declarar los registros definidos por el usuario en la parte
declarativa de cualquier bloque, subprograma o paquete.

SINTAXIS

Los tipos compuestos son definidos por el usuario, y para poder utilizarlos se requieren tres pasos: la
definición, la declaración de la variable y acceso a su contenido.

DEFINICION: Asignación del identificador y listar los campos

2
TYPE tipo_registro IS RECORD (
Campo1 Tipo1 [NOT NULL,
Campo2 Tipo2 [NOT NULL] [:= expr2],
Campo3 Tipo3 [NOT NULL] [:= expr3],
…… … .. …… ……
Campo(n) Tipo(n) [NOT NULL] [:= expr(n)]);

Definición del record para almacenar los datos de la cita y del médico
TYPE reg_articulo IS RECORD
(
v_num_ide clientes.codigo%TYPE,
v_nombres clientes.nombre%TYPE,
);

DECLARACION DE VARIABLE

La declaración de la variable involucra asignarle nombre a la variable y definirla del tipo record
definido: v_nombre reg_nombre.

Declaración de la variable tipo record.


v_info_art reg_articulo;

DONDE
v_info_art identificador de la variable
reg_articulo identificador del record definido previamente

ACCESO A SU CONTENIDO

Acceder al contenido del record involucra una instrucción que consta de tres partes: el nombre de la
variable record seguida de un punto y el nombre del campo al cual se desea acceder.

Acceso al contenido de una variable tipo record.


DBMS_OUTPUT.PUT_LINE('El codigo del cliente ‘||v_info_art.v_num_ide||' y su nombre '||
v_info_art.v_nombres);

3
EJEMPLO 1

DECLARE
TYPE reg_articulo IS RECORD
( v_num_ide clientes.codigo%TYPE,
v_nombres clientes.nombre%TYPE
);

v_info_art reg_articulo;

BEGIN

SELECT codigo, nombre


INTO v_info_art FROM clientes
WHERE codigo=1 ;

DBMS_OUTPUT.PUT_LINE('El codigo del cliente'||v_info_art.v_num_ide||'y su nombre'||


v_info_art.v_nombres);

END;

EJEMPLO 2

Realizar un bloque donde se muestre el código del cliente,


nombre y la venta del vendedor Sandra suarez.

Potrebbero piacerti anche