Andei dando uma pesquisada e não encontrei um exemplo como queria.
Hoje tenho um banco de dados Firebird, e estou trocando para MySQL. Estou programando em delphi e uso componentes da paleta DBX, Gostaria de entender as diferenças entre a sintaxe de a procedure MySQL e a Firebird. Como exemplo trouxe uma Store Proedure da minha base firebird e gostaria de saber como ficaria a mesma procedure em Mysql. Dessa forma vou consegui entender melhor as diferenças.
Essa procedure seleciona os items da tabela Itensentrada, onde o Numero da entrada é a que eu passo pelo parametro RCODENTRADa, e atualiza o estoque alimentando também uma outra tabela de histórico de produtos e clientes.
Não sei exatamente se no MySQL consigo fazer isso. Imagino que sim pois as linguagens são bem semelhantes...mas não acho a sintaxe correta para montar a Store Procedure.
CREATE PROCEDURE ATUALIZA_ESTOQUE_ENTRADA (
RCODENTRADA INTEGER)
AS
declare variable VCODENTRADA integer;
declare variable VCODCLIENTE integer;
declare variable VCODOBRA integer;
declare variable VCODPROD integer;
declare variable VQTDE float;
declare variable VVRUNITARIO numeric(15,2);
declare variable VTIPO char(1);
declare variable VSTATUS varchar(20);
begin
FOR SELECT I.codentrada, I.codobra, I.codproduto, I.quantidade, I.vrunitario
FROM ITENSENTRADA I
WHERE I.codentrada = :rcodentrada
INTO :vcodentrada, :vcodobra, :vcodprod, :vqtde, :vvrunitario do
BEGIN
vtipo = 'E';
SELECT E.codcliente, e.status
FROM ENTRADA e
WHERE E.codentrada = :rcodentrada
INTO :vcodcliente, :vstatus;
if (:vstatus = 'ABERTA' or :vstatus = 'FINALIZADA') then exit;
else
begin
UPDATE entrada e
SET e.status = 'FINALIZADA'
WHERE E.codentrada = :rcodentrada;
UPDATE PRODUTO P SET
P.estoque = P.estoque + :vqtde,
P.vrunitario = :vvrunitario
WHERE P.codproduto = :vcodprod;
INSERT INTO HISTORICOCLIENTES(CODMOV, CODCLIENTE, CODPRODUTO, QTDE, CODOBRA, TIPO) VALUES (:vcodentrada, :vcodcliente, :vcodprod, :vqtde, :vcodobra, :vtipo);
INSERT INTO HISTORICOPRODUTO (CODMOV, CODOBRA, CODCLIENTE, CODPROD, QTDE, VALOR, TIPO) VALUES (:vcodentrada, :vcodobra, :vcodcliente, :vcodprod, :vqtde, :vvrunitario, :vtipo);
end
END
END
Pergunta
Matheus Peluchi
Bom dia pessoal,
Andei dando uma pesquisada e não encontrei um exemplo como queria.
Hoje tenho um banco de dados Firebird, e estou trocando para MySQL. Estou programando em delphi e uso componentes da paleta DBX, Gostaria de entender as diferenças entre a sintaxe de a procedure MySQL e a Firebird. Como exemplo trouxe uma Store Proedure da minha base firebird e gostaria de saber como ficaria a mesma procedure em Mysql. Dessa forma vou consegui entender melhor as diferenças.
Essa procedure seleciona os items da tabela Itensentrada, onde o Numero da entrada é a que eu passo pelo parametro RCODENTRADa, e atualiza o estoque alimentando também uma outra tabela de histórico de produtos e clientes.
Não sei exatamente se no MySQL consigo fazer isso. Imagino que sim pois as linguagens são bem semelhantes...mas não acho a sintaxe correta para montar a Store Procedure.
CREATE PROCEDURE ATUALIZA_ESTOQUE_ENTRADA ( RCODENTRADA INTEGER) AS declare variable VCODENTRADA integer; declare variable VCODCLIENTE integer; declare variable VCODOBRA integer; declare variable VCODPROD integer; declare variable VQTDE float; declare variable VVRUNITARIO numeric(15,2); declare variable VTIPO char(1); declare variable VSTATUS varchar(20); begin FOR SELECT I.codentrada, I.codobra, I.codproduto, I.quantidade, I.vrunitario FROM ITENSENTRADA I WHERE I.codentrada = :rcodentrada INTO :vcodentrada, :vcodobra, :vcodprod, :vqtde, :vvrunitario do BEGIN vtipo = 'E'; SELECT E.codcliente, e.status FROM ENTRADA e WHERE E.codentrada = :rcodentrada INTO :vcodcliente, :vstatus; if (:vstatus = 'ABERTA' or :vstatus = 'FINALIZADA') then exit; else begin UPDATE entrada e SET e.status = 'FINALIZADA' WHERE E.codentrada = :rcodentrada; UPDATE PRODUTO P SET P.estoque = P.estoque + :vqtde, P.vrunitario = :vvrunitario WHERE P.codproduto = :vcodprod; INSERT INTO HISTORICOCLIENTES(CODMOV, CODCLIENTE, CODPRODUTO, QTDE, CODOBRA, TIPO) VALUES (:vcodentrada, :vcodcliente, :vcodprod, :vqtde, :vcodobra, :vtipo); INSERT INTO HISTORICOPRODUTO (CODMOV, CODOBRA, CODCLIENTE, CODPROD, QTDE, VALOR, TIPO) VALUES (:vcodentrada, :vcodobra, :vcodcliente, :vcodprod, :vqtde, :vvrunitario, :vtipo); end END END
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.