Hola todos ..
Tengo el siguiente un SP el cual es ejecutado desde una aplicacion hecha en
visual fox8 mediante ADO.
Desde la aplicacion vfp se controla la transaccion. el esquema es algo asi:
loComando = CREATEOBJECT('adodb.command')
loComando.CommandType = 4 &&& procedimiento almacenado
loComando.CommandText = 'spCompras_Recibir_Compra_AM'
IF THIS.conectar() > 0
loComando.ActiveConnection = THIS.oConexion
...
...
...
loComando.Execute()
THIS.oConexion.CommitTrans
en el SP siguiente necesito hacer un bloqueo sobre la tabla kardex antes de
hacer el select sobre esta, para evitar que varios usuarios ejecuten este
select simultaneamente es decir cuando este select se ejecute los
demas usuarios deben espera hasta que se realice el commit.
he leido sobre SET TRANSACTION ISOLATION LEVEL SERIALIZABLE , es esta la
manera correcta de hacerlo?
CREATE PROCEDURE spCompras_Recibir_Compra_AM
@Codigo_Agencia char(3),
@Codigo_Producto char(10),
@Cantidad int,
@Fecha_Movimiento smalldatetime,
@Identificacion_Tercero char(15),
@Codigo_Compra int,
@Numero_Compra char(10)
AS
DECLARE @Recibida int, @Existencia int
SET @Existencia = 0
SET @Recibida = 1003 --Codigo que corresponde al estado de recibida en la
tabla de maestras_sistemas
PUEDA REALIZAR CONSULTAS SOBRE ESTA
SELECT @Existencia = Existencia
FROM Kardex
WHERE Consecutivo_Kardex IN (SELECT MAX(Consecutivo_Kardex) FROM Kardex
WHERE Codigo_Producto = @Codigo_Producto)
UPDATE Compras SET Codigo_Estado = @Recibida WHERE Codigo_Compra =
@Codigo_Compra
UPDATE Productos_servicios SET Cantidad_Existente = Cantidad_Existente +
@Cantidad
WHERE Codigo_Producto_Servicio = @Codigo_Producto
INSERT INTO Kardex (Codigo_Agencia, Codigo_Producto, Cantidad, Existencia,
Fecha_Movimiento_Producto,
Identificacion_Tercero, Descripcion)
VALUES (@Codigo_Agencia, @Codigo_Producto, @Cantidad, @Existencia +
@Cantidad, @Fecha_Movimiento,
@Identificacion_Tercero, 'Compra Nro: ' + rtrim(@Codigo_Agencia) + '-' +
ltrim(replace( @Numero_Compra,'0','')))
RETURN @@ERROR
GO
Gracias
Abraham Uribe
Leer las respuestas