FUNDAMENTOS
Puedes usar cualquiera de los métodos query de JdbcTemplate o el método update para ejecutar el procedimiento almacenado, teniendo en cuenta si retorna o no un resultado.
Los procedimientos de SQL Server o MySQL pueden retornar directamente el resultado de una consulta utilizando la sentencia SELECT.
También dispones de la clase StoreProcedure donde dispones de opciones de mayor control para la ejecución de procedimientos almacenados.
SINTAXIS
El objetivo es ejecutar procedimientos almacenados que no tengan parametros de salida.
A continuación tienes la sintaxis que debes utilizar.
jdbcTemplate.update("call procedimiento (?, ?, ...)", parámetros);
PROCEDIMIENTO A EJECUTAR
El ejemplo que muestro a continuación es utilizando Oracle y el modelo es EUREKABANK, que lo encuentras en:
El procedimiento es para registrar una transacción que ejecuta un retiro de una cuenta.
create or replace procedure usp_egcc_retiro
(p_cuenta varchar2, p_importe number,p_empleado varchar2, p_clave varchar2)
as
v_msg varchar2(1000);
v_saldo number(12,2);
v_moneda char(2);
v_cont number(5,0);
v_estado varchar2(15);
v_costoMov number(12,2);
v_clave varchar2(10);
begin
-- Lee datos de la cuenta
select
dec_cuensaldo, chr_monecodigo, int_cuencontmov,
vch_cuenestado, chr_cuenclave
into v_saldo, v_moneda, v_cont, v_estado, v_clave
from cuenta
where chr_cuencodigo = p_cuenta
for update;
-- Verifica los datos de la cuenta
if v_estado != 'ACTIVO' then
raise_application_error(-20001,'Cuenta no esta activa.');
end if;
if v_clave != p_clave then
raise_application_error(-20001,'Datos incorrectos.');
end if;
-- Costo de operación
select dec_costimporte
into v_costoMov
from costomovimiento
where chr_monecodigo = v_moneda;
-- Verifica el saldo
v_saldo := v_saldo - p_importe - v_costoMov;
if v_saldo < 0.0 then
raise_application_error(-20001,'Saldo insuficiente.');
end if;
-- Actualiza la cuenta
update cuenta
set dec_cuensaldo = v_saldo,
int_cuencontmov = int_cuencontmov + 2
where chr_cuencodigo = p_cuenta;
-- Registra el movimiento de retiro
v_cont := v_cont + 1;
insert into movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
values(p_cuenta,v_cont,sysdate,p_empleado,'004',p_importe,null);
-- Registra el costo de la operación
v_cont := v_cont + 1;
insert into movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
values(p_cuenta,v_cont,sysdate,p_empleado,'010',v_costoMov,null);
-- Confirmar la Tx
commit;
exception
when others then
v_msg := sqlerrm; -- capturar mensaje de error
rollback; -- cancelar transacción
raise_application_error(-20001,v_msg);
end;
EJECUCIÓN DEL PROCEDIMIENTO
A continuación tienes el código Java para ejecutar el procedimiento usp_egcc_retiro:
public void procRetiro
(String cuenta, double importe,String codEmp, String clave) {
jdbcTemplate.update("call usp_egcc_retiro (?, ?, ?, ?)",
cuenta, importe, codEmp, clave);
}
Debes tener en cuenta que la transacción es controlada en el procedimiento almacenado.
VIDEO DEMOSTRATIVO
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.

prodrias hacer un procedimiento almacenado que haga un listado de varias entidades
ResponderEliminar