Stored Procedures em Mysql – Inserir e editar

Vou dar início a uma série de artigos falando de Stored Procedures, Functions, triggers e views, depois vamos modelar, Programar e Tunar um banco usando essas funções.

Criar o banco de estudos:

   CREATE DATABASE estudo1;
   USE estudo1;

Criar a tabela de estados:

   CREATE TABLE tb_estado(
      est_id tinyint not null primary key,
      est_uf CHAR(2) not null,
      est_nome CHAR(30) not null)
   ENGINE=MyIsam;

Criar a Stored procedure para incluir ou editar um registro:

   DELIMITER &&
     CREATE PROCEDURE sp_estado_inserir (
	IN var_id TINYINT,
	   var_uf CHAR(2),
	   var_nome CHAR(30))
      BEGIN
        REPLACE INTO tb_estado VALUES (var_id,var_uf,var_nome);
      END
   &&

Muito simpes não?
A função DELIMITER, troca o ‘;’ por outra coisa, apra que você possa executar comandos que levem o ‘;’.
Create procedure ‘nome da função’
( aqui, dentro dos parênteses é o seguinte:)
Tipo das variaveis:
IN – Variaveis de entrada
OUT – Variaveis de Saida
INOUT – As 2 coisas.
Não se exqueça que as variaveis precisam levar os tipos de dados VAR_ID TINYINT ( e esse tipo deve ser igual ao tipo na tabela )
Begin – Inicia a procedure
-> aqui no meio vai a instrução SQL, ou uma função.
O Replace, Insere ou substitui um registro, sem a necessidade de usar o UPDATE
End – Finaliza a procedure
&& Fecha o Delimitador escolhido.
Agora vamos chamar a Stored Procedure:

  call sp_estado_inserir(1,'PR','PARANÁ');

Pronto, Paraná inserido.
Todos os exemplos foram executados no Mysql Query Browser, notem que o ID da tabela nao é auto incremento, isso será motivo de um novo post. o proximo sera uma sp para criar um auto_incremento na unha, buscar registros, e excluir.

Obrigado a todos os comments, coloquei no padrão agora ;-)

14 Responses

  1. Muito legal essa serie de artigos que estão por vir Taliba.

    Somente recomendo você seguir no máximo possível as convenções do MySQL.

    Algumas delas são por exemplo palavras reservadas em maiúsculo e tabelas e nomes de colunas em minúsculo. Acredito que facilita muito a leitura:

    CREATE TABLE tb_estado (
    est_id TINYINT NOT NULL PRIMARY KEY,
    est_udf CHAR(2) NOT NULL,
    est_nome CHAR(30) NOT NULL
    ) ENGINE = MyIsam

  2. Hum… concordo com o Diego, e saliento que esta sintaxe é utilizada por todos os SGDBs que são case sensitive, como o são o PostgreSQL e o MySQL.

  3. Bacana cara

    Aguardo mais posts a respeito.

  4. Muito bom artigo meu rapaz! parabéns!!! estava a procurar algo na net, e dos resultados o vosso foste o mais conciso! ^.^

    será que tem como me indicar alguma apostila, ou mesmo um artigo para que eu possa dar continuidade?

    obrigado desde ja!

    abraços

  5. Floris, leio sempre a documentação do mysql, em dev.mysql.com, outra fonte de informações são as listas de discussão!!

  6. Legal cara! Continue com os artigos. Será de grande valia.
    Abraço

  7. Pow brother o melhor que eu já vi…
    mas como estou iniciando tenho uma dúvida cruel..
    tipo.. to usando o phpmyadmin pra criar a tabela e tudo mais… mas quando eu coloco o código:

    DELIMITER &&
    CREATE PROCEDURE sp_estado_inserir (
    IN var_id TINYINT,
    var_uf CHAR(2),
    var_nome CHAR(30))
    BEGIN
    REPLACE INTO tb_estado VALUES (var_id,var_uf,var_nome);
    END
    &&
    ele dá erro… tipo naum consigo…
    to tentando criar faz um tempão… desculpe-me é que estou iniciando agora e preciso aprender isso..
    A stored Procedure pode ser criada no phpmyadmin…? se naum… onde eu crio???
    por favor alguem me ajude…
    vlw!

  8. Kra muito bom seu artigo, Parabéns

    Meu professor ficou uns 2 meses falando de VIEW, TRIGGER, SP, ETC… e eu n consegui entender nada, mas com seus tutoriais estou conseguindo me virar

    valew msm

  9. Hey bruno tira o “DELIMITER”
    eu estou usando o SQL-Front ele é muito bom e simples…

    CARA O MELHOR TUTO QUE EU JA VI…
    PARABENSSS!!!!
    VLW CARA
    Continua nos ajudando =]~
    abraçoo

  10. Ola,

    Muito bom essa serie de artigos, tenho uma pergunta interessante, ja que é para agilizar sera que tem como buscar varias tabelas dentro de uma proc?,,,
    EX: tenhos 2 tabelas “empresa”, “prod_(id da empresa)”…
    ok, eu queria buscar todos os produtos onde o nome da empresa fosse “X” atraves dessa proc, na tabela “empresas” tenho os campos “id,nome,cnpj”…dai eu linkaria o id com o proprio nome da outra tabela “prod_(id)”…seria possivel???

    Obrigado desde já!

  11. Velho muito bom este artigo de para ter uma boa noção oq e Procedure .

    vlw

  12. quanta merda

  13. Eu posso chamar chamar uma stored procedure para fazer de uma vez o povoamento do meu banco? EX:

    call sp_estado_inserir(1,’PR’,'PARANÁ’);
    call sp_estado_inserir(2,’PA’,'PARÁ’);
    call sp_estado_inserir(3,’AM’,'AMAZONAS’);

    Posso disparar isso tudo de uma vez?

Leave a Reply