Está en la página 1de 5

UNIDAD 12

WOLFGANG VARGAS

Creamos el procedimiento llamado creaPaises el cual contendrá dos tablas: una llamada PAISES_P
con la información correspondiente a los nombres de los paises y otra llamada tabla
PROVEEDORES_2 con un Id correspondiente a cada pais.

Inicialmente declaramos todos los elementos contenedores de información necesarios dentro del
procedimiento; una variable tipo tabla con un campo pais para recoger los nombres de los paises y
una variable tipo entero que se usará para verificar si la tabla PAISES_P se encuentra ya creada.

Adicionalmenre, se declararon dos arrays uno llamado array_idPais para almacenar los id de los
paises y otro array_pais para los nombres de los paises, así como dos variables CONT1, CONT2 de
tipo entero para ser usados en el ciclo for requerido posteriormente en el procedimiento.

Asimismo, declaramos una excepción personalizada con el código 10001 y la tabla dummy que
mostrará el mensaje correspondiente a esta excepción creada.

Seguidamente, verificamos si ya está creada en el sistema la tabla PAISES_P de ser negativa la


verificación , procedemos a crear las tablas PAISES_P y PROVEEDORES_2.

A continuación cargamos dentro de la variable tipo tabla llamada T_NOMBRE_PAIS, los nombres de
de los paises no repetidos a través de la sentencia select distinct y esta variable la traslamos al array
llamado ARRAY_PAIS, para a través del numero de registros de este array crear un ID_PAIS del tipo
secuencial mediante un ciclo FOR.

Luego, de tener creados y cargados los dos ARRAYS (ARRAY_PAIS Y ARRAY_IDPAIS), procedemos a
trasladar esta información dentro de las tablas PAISES_P Y PROVEEDORES_2, con la condición de
que si algún campo dentro del ARRAY_PAIS se encuentra NULO o VACIO, devolvemos las inserciones
hechas hasta el momento con la sentencia transaccional ROLLBACK y que se active la excepción
mostrando en pantalla un mensaje de que el campo pais se encuentra vacio, asi como procediendo
al borrado de las tablas ya creadas.
CODIGO DEL PROCEDIMIENTO
create procedure creaPaises()
as
begin

-- tabla interna con la data correspondiente a la tabla proveedores


-- y una variable de verificación de existencia de tabla paises_p
declare t_nombre_pais table (pais nvarchar(50));
declare t_verificacion int;

-- array que alojará la data del id del pais


declare array_idPais integer ARRAY;

-- array que alojará la data de los paises


declare array_pais NVARCHAR(50) ARRAY;

-- contador para el bucle for


declare cont1, cont2 integer:= 1;

-- declaración de código y mensaje de la excepción


declare CAMPO_NULO CONDITION FOR SQL_ERROR_CODE 10001;
declare EXIT HANDLER FOR CAMPO_NULO SELECT ::SQL_ERROR_MESSAGE FROM dummy;

--verificación de existencia en el sistema de la tabla paises_p;

select count(*) into t_verificacion from "SYS"."RS_TABLES_" where schema = 'SYSTEM' AND
NAME='PAISES_P';
if :t_verificacion = 0 then
-- creación de la tabla paises
create table paises_p (pais nvarchar(50));

-- creación de tablas proveedores_2


create table proveedores_2 (idPais integer);
end if;

-- carga de datos de paises en la tabla interna


t_nombre_pais = select distinct pais from proveedores;

-- carga de la tabla t_nombre_pais dentro de un array


array_pais := array_agg(:t_nombre_pais.pais);

-- bucle for para la creación de un id pais secuencial


for cont1 IN 1..cardinality (:array_pais) do
array_idPais[:cont1] := :cont1;
end for;

-- Pase de datos desde los arrays a las tablas paises y proveedores

for cont2 IN 1..cardinality (:array_pais) do


insert into paises_p values (:array_pais[:cont2]);
insert into proveedores_2 values (:array_idPais[:cont2]);

if :array_pais[:cont2] = null or :array_pais[:cont2] ='' then


ROLLBACK;
if :t_verificacion <> 0 then
drop table "SYSTEM"."PAISES_P";
drop table "SYSTEM"."PROVEEDORES_2";
end if;
SIGNAL CAMPO_NULO SET MESSAGE_TEXT = 'ERROR!, CAMPO PAIS SE ENCUENTRA VACIO';
end if;
end for;
end;

Se ejecutó el procedimiento.

Y se realizó posteriormente el llamado al procedimiento

Verificando las tablas a traves del SELECT observamos:


La tabla PAISES_P

Y la tabla PROVEEDORES_2:

Ahora extresando el procedimiento para probar si salta la excepción insertamos un campo vació
en la tabla proveedores:

Y al llamar el procedimiento vemos que salta la excepción mostrando el campo en pantalla.


Y borrando las tablas PAISES_P y PROVEEDORES_2

También podría gustarte