Jump to content
Andinho Luiz

Erro com Procedure no MySQL

Recommended Posts

Boa tarde a todos,

 

Estou tentando criar uma Procedure no MySQL e tenho esta tabela "Cliente"

 

CREATE TABLE IF NOT EXISTS cliente (
    id_cliente INT(5) AUTO_INCREMENT PRIMARY KEY,
    tipo CHAR(1) NOT NULL,
    rSocialNome VARCHAR(20) NOT NULL,
    cnpjCPF VARCHAR(30) NOT NULL,
    ieRG VARCHAR(30),
    contato VARCHAR(50),
    email VARCHAR(30),
    site VARCHAR(30),
    dataCadastro DATE,
    usuario VARCHAR(30)
)ENGINE=MyISAM;

Tenho outra tabela que é a "Endereço"

CREATE TABLE IF NOT EXISTS `endereco` (
  `id_endereco` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_cliente` INT(11) NOT NULL,
  `logradouro` VARCHAR(20) NOT NULL ,
  `rua` VARCHAR(25) NOT NULL ,
  `numero` INT(11) NOT NULL ,
  `complemento` VARCHAR(40) ,
  `bairro` VARCHAR(40) NOT NULL ,
  `cidade` VARCHAR(40) NOT NULL ,
  `estado` VARCHAR(40) NOT NULL ,
  `cep` VARCHAR(9) NOT NULL ,
  PRIMARY KEY (`id_endereco`),
  constraint fk_endereco_cliente FOREIGN KEY (id_cliente) REFERENCES cliente (id_cliente)
) ENGINE=MyISAM

 

Para fazer o insert nas duas tabelas eu criei uma procedure, podem quando tento adicionar o MySQL da erro "ALERTA: Erro ao inserir na tabela de pessoas"

 

DELIMITER $$
CREATE DEFINER=`dotinfoc`@`localhost` PROCEDURE `cad_cliente`(
   IN c_tipo CHAR(1),
   IN c_rSocialNome VARCHAR(20),
   IN c_cnpjCPF VARCHAR(30),
   IN c_ieRG VARCHAR(30),
   IN c_contato VARCHAR(50),
   IN c_email VARCHAR(30),
   IN c_site VARCHAR(30),
   IN c_logradouro VARCHAR(20),
   IN c_rua VARCHAR(25),
   IN c_numero INT(11) ,
   IN c_complemento VARCHAR(40) ,
   IN c_bairro VARCHAR(40),
   IN c_cidade VARCHAR(40),
   IN c_estado VARCHAR(40),
   IN c_cep VARCHAR(9)
   )
BEGIN
   DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem";
   DECLARE excecao SMALLINT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1;
   
   START TRANSACTION;
   INSERT INTO cliente (tipo, rSocialNome, cnpjCPF, ieRG, contato, email, site, dataCadastro, usuario)
   VALUES (c_tipo, c_rSocialNome, c_cnpjCPF, c_ieRG, c_contato, c_email, c_site);

   IF excecao = 1 THEN
      SET msg = "ALERTA: Erro ao inserir na tabela de pessoas";
      ROLLBACK;
   ELSE
      SELECT DISTINCT LAST_INSERT_ID() INTO @id_cliente FROM cliente;
      IF excecao = 1 THEN
         SET msg = "ALERTA: Erro ao buscar o ultimo ID inserido em clientes";
         ROLLBACK;
      ELSE 
         INSERT INTO endereco(id_cliente, logradouro, rua, numero, complemento, bairro, cidade, estado, cep) values(@id_cliente, c_logradouro, c_rua, c_numero, c_complemento, c_bairro, c_cidade, c_estado, c_cep);
         IF excecao = 1 THEN
            SET msg = "ALERTA: Erro ao inserir na tabela de Endereco";
            ROLLBACK;
         END IF;
      END IF;
   END IF;
   IF excecao <> 1 THEN
      COMMIT;
      SET msg = "ALERTA: Registro Incluido com sucesso";
   END IF;
   SELECT msg AS msg;   
END$$
DELIMITER ;

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Guilherme Scarpatto
      Estou fazendo um website de perguntas e respostas, na qual o usuário adiciona sua pergunta e outros usuários podem respondê-las, basicamente como esse. Eu consegui fazer até a parte que o usuário cadastra a pergunta no banco, agora eu empaquei na parte de mostrar esssas perguntas na tela inicial do site para que outros usuários possam respondê-las. Queria uma ajuda de como posso fazer isso, qualquer coisa posso postar os cógidos aqui depois.
    • By rohilario_
      Galera, boa tarde!
      Estou desenvolvendo um sistema com PHP, Mysql, JS e Bootstrap, que gerencia sorteios conforme cadastro.
      Tudo funcionando perfeitamente, contudo atualmente fazemos impressões em um layout e colocamos em uma urna, na qual acontece o sorteio manual..
      Gostaria, de alguma forma, criar uma tela de sorteio, onde ele buscaria as informações do banco (coluna cartela) e sorteasse um número de cartela qualquer com alguns efeitos de "suspense".
       
      O grande problema para mim até o momento: Fraco em JS apesar de fazer algumas "coisinhas"; Não faço ideia nem por onde começar, comecei tão somente lendo alguns efeitos com jquery.
      https://api.jquery.com/category/effects/
      Não sei como pegar as informações do banco mysql com JS.
      Sugeri o JS por conta das libs disponíveis, mas poderia ser com o proprio PHP...
       
      Agradeço as colaborações desde já!
    • By Dark_Trap000
      Ola, eu tenho um problema ao salvar ips permitidos no MySQL
      segue o codigo de salvamento
      <?php session_start(); include "conexao.php"; if (empty($_SESSION['usuario'])) { header('Location: login.php'); exit(); } $ip = $_SESSION['ip']; echo $pegar_ip = $_SERVER["REMOTE_ADDR"]; if($ip == $pegar_ip) { echo "IP Autorizado!!!"; } else if($ip == 0) { $pegar_ip = $_SERVER["REMOTE_ADDR"]; echo "IP Não Registrado!!!"; $sql = "UPDATE usuario SET creditos = $salvar WHERE usuario_id = $id"; die(); } ?> ele chega á estar tudo certo, + o problema e salvar no mysql. qual o problema ?
    • By MatheusSmidt
      Bom dia,
      Estou precisando de ajuda com o código do formulário de um sistema de cadastro.
      A página é para consulta mas tem a possibilidade de adicionar ou retirar "faltas" de cada profissional cadastrado através de botões simples e também apagar um ou múltiplos profissionais da lista, através de checkbox..
      Essa ações atualizam o banco de dados e já retornam na tela automaticamente.
      O problema é que não fui eu que estruturei o código PHP e não consigo aliar as duas funções que falei anteriormente. Quando consigo fazer funcionar o sistema de adição e redução de faltas, consigo apenas excluir o último nome da lista, mesmo selecionando vários. E quando consigo resolver a parte de excluir vários nomes, não consigo adicionar e reduzir o número de faltas.
       
      Provavelmente é um problema no "WHILE" ou na abertura e fechamento de formulário. Porém não consegui resolver.
      Se alguém conseguir resolver seria ótimo.
      Agradeço desde já. Em anexo envio um print da página para melhor entendimento.
       
       
       
       
    • By guzulino
      Eu preciso criar um sistema de busca em tempo real vamos dizer assim, na realidade eu até consegui achar boa parte dele.
      <form onsubmit="return false;"> <input id="campo_cpu" type="text" name="nome_cpu" placeholder="Modelo do processador"> </form> <script src="auto-complete.js"></script> <script> var demo1 = new autoComplete({ selector: '#campo_cpu', minChars: 1, source: function(term, suggest){ term = term.toLowerCase(); var choices = ['ActionScript', 'AppleScript', 'Asp', 'Assembly', 'BASIC', 'Batch', 'C', 'C++', 'CSS', 'Clojure', 'COBOL', 'ColdFusion', 'Erlang', 'Fortran', 'Groovy', 'Haskell', 'HTML', 'Java', 'JavaScript', 'Lisp', 'Perl', 'PHP', 'PowerShell', 'Python', 'Ruby', 'Scala', 'Scheme', 'SQL', 'TeX', 'XML']; var suggestions = []; for (i=0;i<choices.length;i++) if (~choices[i].toLowerCase().indexOf(term)) suggestions.push(choices[i]); suggest(suggestions); } }); </script> Eu consegui esse código e ele funciona tranquilamente, mas isso é só um teste, o usuário vai digitar o que ele precisa e no banco de dados eu mais de 5000 registros, então eu preciso que seja feita uma consulta no banco de dados para que ele mostre o que tem lá, acho que colocar 5000 numa string é um #@?&#036;%~ trampo além de eu achar que vai dar caquinha, o problema é que eu não faço a mínima ideia de como fazer isso, eu acho que é tipo uma consulta no banco a cada caractére digitado mostrando somente os resultados compatíveis, mas como disse antes não tenho ideia, se alguém agradeço desde já. Valeu
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.