Procedimentos em SQL

Share

procedure

 

Uma utilidade muito importante de bancos de dados é a criação de procedimentos. O procedimento no banco de dados tem algumas vantágens sobre trabalhar diretamente com uma linguagem de programação. Primeiro porque ficam centralizados apenas no banco de dados e segundo que o procedimento é executado diretamente no servidor, o que traz um desempenho maior para seus programas. Aqui explicarei como criar procedimentos.

 

 

 

Como declarar um PRODEDURE em SQL:

DELIMITER $$

CREATE PROCEDURE ‘bancodedados’.’nomedoprocedimento’ (ARG1 TIPO,ARG2 TIPO)

BEGIN

INSTRUÇÃO1;

INSTRUÇÃO2;

INSTRUÇÃON;

END$$

 

De exemplo, vamos criar um banco de dados de estoque:

CREATE DATABASE ESTOQUE;

 

Execute o comando Use para podermos trabalhar com o banco:
USE ESTOQUE;
Vamos criar as tabelas PRODUTOS, ENTRADA_PRODUTOS, SAIDA_PRODUTOS e ESTOQUE:

CREATE TABLE PRODUTOS (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
DESCRICAO VARCHAR(45) NOT NULL,
PRIMARY KEY (ID));

CREATE TABLE ENTRADA_PRODUTOS (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
ID_PRODUTO INT UNSIGNED NOT NULL,
DATA DATE NOT NULL,
QUANTIDADE INT UNSIGNED NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (ID_PRODUTO) REFERENCES PRODUTOS(ID));

CREATE TABLE SAIDA_PRODUTOS (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
ID_PRODUTO INT UNSIGNED NOT NULL,
DATA DATE NOT NULL,
QUANTIDADE INT UNSIGNED NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (ID_PRODUTO) REFERENCES PRODUTOS(ID));

CREATE TABLE ESTOQUE(
ID_PRODUTO INT UNSIGNED NOT NULL,
QUANTIDADE INT UNSIGNED NOT NULL,
FOREIGN KEY (ID_PRODUTO) REFERENCES PRODUTOS(ID));

 

Agora vamos criar os procedimentos para trabalhar com o estoque:

DELIMITER $$

CREATE PROCEDURE `ESTOQUE`.`CADASTRAR_PRODUTOS` (ARG1_DESC VARCHAR(45))
BEGIN
INSERT INTO PRODUTOS(DESCRICAO) VALUES (ARG1_DESC);
INSERT INTO ESTOQUE(ID_PRODUTO,QUANTIDADE)
VALUES ((SELECT MAX(ID) FROM PRODUTOS),0);
END$$

 

DELIMITER $$
CREATE PROCEDURE `ESTOQUE`.`ENTRADA_PRODUTOS` (PROD INT,QUANT INT)
BEGIN
INSERT INTO ENTRADA_PRODUTOS (ID_PRODUTO,DATA,QUANTIDADE)
VALUES (PROD, DATE(NOW()),QUANT);
UPDATE ESTOQUE SET QUANTIDADE=QUANTIDADE+QUANT WHERE ID_PRODUTO=PROD;
END$$

 

DELIMITER $$
CREATE PROCEDURE `ESTOQUE`.`SAIDA_PRODUTOS` (PROD INT,QUANT INT)
BEGIN
INSERT INTO ENTRADA_PRODUTOS (ID_PRODUTO,DATA,QUANTIDADE)
VALUES (PROD, DATE(NOW()),QUANT);
UPDATE ESTOQUE SET QUANTIDADE=QUANTIDADE-QUANT WHERE ID_PRODUTO=PROD;
END$$

 

Para chamar o procedimento é simples:

CALL CADASTRAR_PRODUTOS(‘ARROZ’);

CALL ENTRADA_PRODUTOS(1, 10);

 

Agora use a instrução SELECT  e verifique se as instruções foram executadas corretamente.

Quer continuar por dentro das novidades do Blog Seja Livre? Siga o nosso perfil no TWITTER, curta a nossa página no FACEBOOK ou adicione o Blog Seja Livre nos seus círculos do GOOGLE+.