Saltar la navegación

2.2.1.- Subtipos.

Se ven dos palabras escritas “Hoy” y “Mañana”. La primera está tachada en rojo.
ITE (Uso educativo nc)



Cuántas veces no has deseado cambiarle el nombre a las cosas por alguno más común para ti. Precisamente, esa es la posibilidad que nos ofrece PL/SQL con la utilización de los subtipos.

PL/SQL nos permite definir subtipos de tipos de datos para darles un nombre diferente y así aumentar la legibilidad de nuestros programas. Los tipos de operaciones aplicables a estos subtipos serán las mismas que los tipos de datos de los que proceden. La sintaxis será:

SUBTYPE subtipo IS tipo_base;

Donde subtipo será el nombre que le demos a nuestro subtipo y tipo_base será cualquier tipo de dato en PL/SQL.

A la hora de especificar el tipo base, podemos utilizar el modificador %TYPE para indicar el tipo de dato de una variable o de una columna de la base de datos y %ROWTYPE para especificar el tipo de un cursor o tabla de una base de datos.

SUBTYPE id_familia IS familias.identificador%TYPE; -- Permite nombrar a la columna identificador de la tabla famiias con el nombre id_familia.
SUBTYPE agente IS agentes%ROWTYPE; -- Permite nombrar a las filas de la tabla agentes con el nombre agente

Los subtipos no podemos restringirlos, pero podemos usar un truco para conseguir el mismo efecto y es por medio de una variable auxiliar:

SUBTYPE apodo IS varchar2(20);          --ilegal
aux varchar2(20);
SUBTYPE apodo IS aux%TYPE;               --legal

Los subtipos son intercambiables con su tipo base. También son intercambiables si tienen el mismo tipo base o si su tipo base pertenece a la misma familia:

DECLARE
     SUBTYPE numero IS NUMBER;
     numero_tres_digitos NUMBER(3);
     mi_numero_de_la_suerte numero;
     SUBTYPE encontrado IS BOOLEAN;
     SUBTYPE resultado IS BOOLEAN;
     lo_he_encontrado encontrado;
     resultado_busqueda resultado;
     SUBTYPE literal IS CHAR;
     SUBTYPE sentencia IS VARCHAR2;
     literal_nulo literal;
     sentencia_vacia sentencia;
BEGIN
     ...
     numero_tres_digitos := mi_numero_de_la_suerte;     --legal
     ...
     lo_he_encontrado := resultado_busqueda;               --legal
     ...
     sentencia_vacia := literal_nulo;                    --legal
     ...
END;


Los cursores permiten recorrer los registros que devuelve una consulta SQL almacenados en memoria.

Autoevaluación

Pregunta

Indica la afirmación correcta.

Respuestas

Los subtipos lo único que hacen es añadir complejidad a nuestros programas.

No hay manera de restringir los subtipos con respecto a su tipo base.

Podemos definir un subtipo cuyo tipo base sea una tabla de la base de datos.

Podemos definir un subtipo de una variable pero no de una columna de la base de datos.

Retroalimentación