Bievenido
Bienvenido al Blog de Herman Aguilar!!!
Dedicado a compartir material para los alumnos de UJAT-DAIS
Dedicado a compartir material para los alumnos de UJAT-DAIS
Mostrando entradas con la etiqueta Programación en Bases de Datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación en Bases de Datos. Mostrar todas las entradas
miércoles, 7 de marzo de 2018
lunes, 19 de febrero de 2018
miércoles, 5 de abril de 2017
Muestra del procedimiento abcc y actividad de segundo parcial
Les dejo la muestra del procedimiento:
Noten que cambié el procedimiento a municipios_abcc, que significa municipios altas, bajas, cambios y consultas.
De lo que expliqué en la mañana, en la opción 4, en lugar de varios IF usé CASE, es lo mismo pero más limpio.
Recuerden que la entrega es para este viernes 7 de octubre y es un procedimiento almacenado por cada tabla catálogo. Además de haberlo compilado en la base de datos, lo guardan en su carpeta personal de DropBox (un archivo de texto por cada procedimiento). Con esto cerramos las actividades del segundo parcial.
En breve subiré el proyecto en NetBeans.
create or replace procedure municipios_abcc
(
p_op in number --1 insert, 2 update, 3 delete, 4 consultas
, p_valido out number --1 sí, 2 no válido
, p_error out varchar2 --mensaje de error cuando no es válida la ejecución
, p_municipio_id in out number --llave primaria, se genera cuando es insert, no se modifica
, p_nombre in out varchar2 --nombre del municipio
, p_estado_id in out number --llave foránea, viene de la tabla estados
, p_consulta out sys_refcursor --resultado de la consulta para la opcion 4
) as
begin
--limpiando y validando
p_nombre:= upper(trim(p_nombre));
if p_op=1 then
p_municipio_id:= sec_municipios.nextval;
insert into municipios(municipio_id, nombre, estado_id)values
(p_municipio_id, p_nombre, p_estado_id);
end if;
if p_op=2 then--actualizando
update municipios set
nombre=p_nombre ,
estado_id = p_estado_id
where municipio_id=p_municipio_id;
end if;
if p_op=3 then--borrando
delete from municipios where municipio_id = p_municipio_id;
end if;
if p_op = 4 then --consultado
case
when p_municipio_id is not null then --si es consulta por PK
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
and m.municipio_id = p_municipio_id
order by m.nombre;
when p_nombre is not null then --si es consulta por nombre, buscamos por patrón
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
and m.nombre like '%'||p_nombre||'%'
order by m.nombre;
when p_estado_id is not null then --si es por estado buscamos por esta FK
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
and m.estado_id = p_estado_id
order by m.nombre;
else --si no es ninguna de las anteriores, regresamos toda la tabla
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
order by m.nombre;
end case;
end if;
p_valido:=1;
exception
when others then
p_valido:=0;
p_error :='Ocurrió un error '||sqlcode||' '||sqlerrm;
end municipios_abcc;
Noten que cambié el procedimiento a municipios_abcc, que significa municipios altas, bajas, cambios y consultas.
De lo que expliqué en la mañana, en la opción 4, en lugar de varios IF usé CASE, es lo mismo pero más limpio.
Recuerden que la entrega es para este viernes 7 de octubre y es un procedimiento almacenado por cada tabla catálogo. Además de haberlo compilado en la base de datos, lo guardan en su carpeta personal de DropBox (un archivo de texto por cada procedimiento). Con esto cerramos las actividades del segundo parcial.
En breve subiré el proyecto en NetBeans.
create or replace procedure municipios_abcc
(
p_op in number --1 insert, 2 update, 3 delete, 4 consultas
, p_valido out number --1 sí, 2 no válido
, p_error out varchar2 --mensaje de error cuando no es válida la ejecución
, p_municipio_id in out number --llave primaria, se genera cuando es insert, no se modifica
, p_nombre in out varchar2 --nombre del municipio
, p_estado_id in out number --llave foránea, viene de la tabla estados
, p_consulta out sys_refcursor --resultado de la consulta para la opcion 4
) as
begin
--limpiando y validando
p_nombre:= upper(trim(p_nombre));
if p_op=1 then
p_municipio_id:= sec_municipios.nextval;
insert into municipios(municipio_id, nombre, estado_id)values
(p_municipio_id, p_nombre, p_estado_id);
end if;
if p_op=2 then--actualizando
update municipios set
nombre=p_nombre ,
estado_id = p_estado_id
where municipio_id=p_municipio_id;
end if;
if p_op=3 then--borrando
delete from municipios where municipio_id = p_municipio_id;
end if;
if p_op = 4 then --consultado
case
when p_municipio_id is not null then --si es consulta por PK
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
and m.municipio_id = p_municipio_id
order by m.nombre;
when p_nombre is not null then --si es consulta por nombre, buscamos por patrón
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
and m.nombre like '%'||p_nombre||'%'
order by m.nombre;
when p_estado_id is not null then --si es por estado buscamos por esta FK
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
and m.estado_id = p_estado_id
order by m.nombre;
else --si no es ninguna de las anteriores, regresamos toda la tabla
open p_consulta for
select m.municipio_id, m.nombre, e.nombre estado_nombre, m.estado_id
from municipios m, estados e
where m.estado_id = e.estado_id
order by m.nombre;
end case;
end if;
p_valido:=1;
exception
when others then
p_valido:=0;
p_error :='Ocurrió un error '||sqlcode||' '||sqlerrm;
end municipios_abcc;
lunes, 13 de marzo de 2017
Ejemplo de procedimiento ABC
create or replace PROCEDURE LINEAS_ABC
(
P_OP IN NUMBER
, P_VALIDO OUT NUMBER
, P_ERROR OUT VARCHAR2
, P_LINEA_ID IN OUT NUMBER
, P_NOMBRE IN OUT VARCHAR2
) AS
BEGIN
--LIMPIANDO Y validando
p_nombre:= upper(trim(p_nombre));
if P_OP=1 then
p_linea_id:= sec_lineas.nextval;
insert into lineas(linea_id,nombre)values
(p_linea_id,p_nombre);
end if;
if P_OP=2 then--ACTUALIZANDO
update lineas set nombre=p_nombre where linea_id=p_linea_id;
end if;
if P_OP=3 then--BORRANDO
delete from lineas where linea_id=p_linea_id;
end if;
p_valido:=1;
exception
when others then
p_valido:=0;
p_error :='Ocurrió un error '||sqlcode||' '||sqlerrm;
END LINEAS_ABC;
Los cambios fueron:
1. Todos los parámetros correspondientes a la tabla deben ser de tipo out.
2. Después del begin se agrego la sección de limpieza y validación, un ejemplo de validación:
if p_precio <0 then
p_valido:=0;
p_error:='Precio no válido';
return;
end if;
3. Se modificó el update para no cambiar la llave primaria, todos los demás campos si pueden cambiar.
4. En el insert se agrego el uso de una secuencia, en este ejemplo sec_lineas, hay que crear una secuencia por cada tabla.
5. Se agregó la sección Exception para el manejo de excepciones o errores.
miércoles, 8 de febrero de 2017
lunes, 16 de mayo de 2016
Ejecutar Stored Procedure Actualizado
Modifiqué el código para que, además de la suma, regrese una fecha y una cadena, lo anterior para que se guíen mejor en cada una de sus aplicaciones.
Tutorial actualizado.
viernes, 8 de abril de 2016
Script para municipios y estados
create table ESTADOS
(
ESTADO_ID
NUMBER(10) not null,
NOMBRE VARCHAR2(100) not null
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents
unlimited
);
alter table ESTADOS
add constraint
ESTADOS_PK primary key (ESTADO_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
prompt Creating MUNICIPIOS...
create table MUNICIPIOS
(
MUNICIPIO_ID
NUMBER(10) not null,
NOMBRE VARCHAR2(100) not null,
ESTADO_ID NUMBER(10) not null
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents
unlimited
);
alter table MUNICIPIOS
add constraint
MUNICIPIOS_PK primary key (MUNICIPIO_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents
unlimited
);
alter table MUNICIPIOS
add constraint
MUNICIPIOS_ESTADOS_FK foreign key (ESTADO_ID)
references
ESTADOS (ESTADO_ID);
miércoles, 16 de marzo de 2016
lunes, 15 de febrero de 2016
lunes, 23 de abril de 2012
Suscribirse a:
Entradas (Atom)
