procedure replicação estoque
galera estou tentando fazer uma procedure para atualizar o estoque, se existe o produto na tabela ele atualiza se não existir ele cria. mas esta acontecendo um bug, de 500 produtos só estão inserido 3 registros.
Uso Delphi com Zeos para o MySQL
CREATE DEFINER = 'user'@'%' PROCEDURE `UPD_ESTOQUE`(
IN `CODIGO` TINYINT,
IN `ESTL1` TINYINT,
IN `ESTL2` TINYINT
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE EXISTE INTEGER;
SET EXISTE = 0;
SET EXISTE = coalesce((SELECT COUNT(PROD_ID) FROM ESTOQUE
WHERE PROD_ID = CODIGO),0);
IF EXISTE > 0 THEN
UPDATE ESTOQUE SET
ESTOQ_L1 = ESTL1,
ESTOQ_L2 = ESTL2
WHERE
PROD_ID = CODIGO AND
ESTOQ_ID = ESTOQ_ID;
ELSE
INSERT INTO ESTOQUE(
PROD_ID,
ESTOQ_L1,
ESTOQ_L2)
VALUE (
CODIGO,
ESTL1,
ESTL2);
END if;
END;
Código em Delphi
ConMySQL.Connected := False;
ConMySQL.Connected := True;
CdsEstoque.Close;
CdsEstoque.Open;
Caption := IntToStr(CdsEstoque.RecordCount)+' PRODUTOS À SEREM REPLICADOS';
CdsEstoque.First;
while not CdsEstoque.Eof do
begin
SQLEstoque :=
'CALL UPD_ESTOQUE( '+
CdsEstoquePROD_ID.AsString+','+
CdsEstoqueESTOQ_L1.AsString+','+
CdsEstoqueESTOQ_L2.AsString+');';
QryEstoque.Close;
QryEstoque.SQL.Clear;
QryEstoque.SQL.Add(SQLEstoque);
QryEstoque.ExecSQL;
CdsEstoque.next;
end;
ShowMessage('Concluido');
end;
Uso Delphi com Zeos para o MySQL
CREATE DEFINER = 'user'@'%' PROCEDURE `UPD_ESTOQUE`(
IN `CODIGO` TINYINT,
IN `ESTL1` TINYINT,
IN `ESTL2` TINYINT
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE EXISTE INTEGER;
SET EXISTE = 0;
SET EXISTE = coalesce((SELECT COUNT(PROD_ID) FROM ESTOQUE
WHERE PROD_ID = CODIGO),0);
IF EXISTE > 0 THEN
UPDATE ESTOQUE SET
ESTOQ_L1 = ESTL1,
ESTOQ_L2 = ESTL2
WHERE
PROD_ID = CODIGO AND
ESTOQ_ID = ESTOQ_ID;
ELSE
INSERT INTO ESTOQUE(
PROD_ID,
ESTOQ_L1,
ESTOQ_L2)
VALUE (
CODIGO,
ESTL1,
ESTL2);
END if;
END;
Código em Delphi
ConMySQL.Connected := False;
ConMySQL.Connected := True;
CdsEstoque.Close;
CdsEstoque.Open;
Caption := IntToStr(CdsEstoque.RecordCount)+' PRODUTOS À SEREM REPLICADOS';
CdsEstoque.First;
while not CdsEstoque.Eof do
begin
SQLEstoque :=
'CALL UPD_ESTOQUE( '+
CdsEstoquePROD_ID.AsString+','+
CdsEstoqueESTOQ_L1.AsString+','+
CdsEstoqueESTOQ_L2.AsString+');';
QryEstoque.Close;
QryEstoque.SQL.Clear;
QryEstoque.SQL.Add(SQLEstoque);
QryEstoque.ExecSQL;
CdsEstoque.next;
end;
ShowMessage('Concluido');
end;
Sidney Abreu
Curtidas 0