DunkMask 1 Denunciar post Postado Setembro 4, 2012 Olá, boa noite. Estou precisando de uma ajudinha para criar um procedure para o mysql, preciso inserir 300.000 nomes em uma tabela atraves do procedimento. Estou usando a seguinte logica: $x = 1; while($x <= 300000){ INSERT INTO cliente (nome) VALUES ('nome $x'); $x++; } Tentei criar algo com algumas informações que vi pela internet mas acabei ficando mais confuso. Será que alguém poderia me dar uma ajudinha? Desde já agradeço a quem ler e deixar sua opinião. Compartilhar este post Link para o post Compartilhar em outros sites
DiegoAngra07 21 Denunciar post Postado Setembro 4, 2012 Boa noite amigo, Já viu esse artigo de um grande colaborador aqui do iMasters? Quais são suas dúvidas? Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
DunkMask 1 Denunciar post Postado Setembro 7, 2012 Olá, boa tarde. Bem, eu estava vendo algumas coisinhas aqui no link que foi me enviado mas fiquei mais confuso ainda. Tentei usar varias sintax Estou usando o seguinte exemplo: CREATE PROCEDURE inserirCliente DECLARE @i INT = 1; WHILE @i <= 2 BEGIN INSERT INTO cliente (nome) VALUES ('nome'||@i); @i += 1; END; e ele me apresenta o seguinte erro: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE @i INT = 1' at line 2 Estou tentando criar um procedimento que faça varios inserts na tabela. Alguem pode me ajudar com isso? Desde já agradeço Compartilhar este post Link para o post Compartilhar em outros sites
DiegoAngra07 21 Denunciar post Postado Setembro 7, 2012 O DECLARE e WHILE precisam ficar dentro do BEGIN. Assim: DECLARE PROCEDURE nome BEGIN -- Tudo que quiser fazer END; Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
DunkMask 1 Denunciar post Postado Setembro 7, 2012 O DECLARE e WHILE precisam ficar dentro do BEGIN. Assim: DECLARE PROCEDURE nome BEGIN -- Tudo que quiser fazer END; Abraço. Neste caso então eu deveria criar outro begin / end para o while? CREATE PROCEDURE inserirCliente DECLARE @i INT = 1; BEGIN WHILE @i <= 2 begin INSERT INTO cliente (nome) VALUES ('nome'||@i); @i += 1; end; END; Meu objetivo é criar uma procedure que seja capaz de inserir digamos que 10 clientes no banco, tipo: Nome 1, Nome 2, Nome 3, ... neste caso eu preciso concatenar o contador junto com o valor 'nome', nesta questão eu fiz certo? Compartilhar este post Link para o post Compartilhar em outros sites
DiegoAngra07 21 Denunciar post Postado Setembro 8, 2012 Bom dia amigo, A concatenação eu acredito que esteja certa sim você terá que fazer um teste. O DECLARE precisa ficar dentro do BEGIN, e o WHILE é assim: WHILE condicao DO -- Do your stuff END WHILE; Manual do MySQL sobre WHILE. A disposição, abraço. Compartilhar este post Link para o post Compartilhar em outros sites
DunkMask 1 Denunciar post Postado Setembro 8, 2012 Bom dia amigo, A concatenação eu acredito que esteja certa sim você terá que fazer um teste. O DECLARE precisa ficar dentro do BEGIN, e o WHILE é assim: WHILE condicao DO -- Do your stuff END WHILE; Manual do MySQL sobre WHILE. A disposição, abraço. Bom seguindo o manual do mysql ainda continua aparecendo o erro pra mim. Este é o código que estou usando CREATE PROCEDURE insereCli() BEGIN DECLARE v1 INT DEFAULT 2; WHILE v1 < 10 DO INSERT INTO cliente (idCliente, nome) VALUES (v1, 'Nome'||v1); SET v1 = v1 + 1; END WHILE; END; E aparece o seguinte erro de syntax: consulta SQL: CREATE PROCEDURE insereCli( ) BEGIN DECLARE v1 INT DEFAULT 2; Mensagens do MySQL : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 Ja to ficando doido com isso, estou usando o phpmyadmin do meu servidor local, será que pode ser ele? Preciso terminar isso para apresentar um trabalho na segunda e já estou ficando louco. --------------------------Edit------------------------------------------- Bom agora finalmente eu consegui fazer o procedimento funcionar, o problema era que eu nao coloquei o delimiter no inicio no fim da procedure, meu problema agora é só descobrir agora como concatenar o contador junto com o valor nome para ser inserido "nome 1, nome 2, ..." DELIMITER $$ CREATE PROCEDURE insereCli() BEGIN DECLARE v1 INT DEFAULT 10; WHILE v1 <= 50 DO INSERT INTO cliente (idCliente, nome) VALUES (v1, 'Nome'v1); SET v1 = v1 + 1; END WHILE; END $$ DELIMITER ; Compartilhar este post Link para o post Compartilhar em outros sites
DiegoAngra07 21 Denunciar post Postado Setembro 9, 2012 Bom seguindo o manual do mysql ainda continua aparecendo o erro pra mim. Este é o código que estou usando CREATE PROCEDURE insereCli() BEGIN DECLARE v1 INT DEFAULT 2; WHILE v1 < 10 DO INSERT INTO cliente (idCliente, nome) VALUES (v1, 'Nome'||v1); SET v1 = v1 + 1; END WHILE; END; E aparece o seguinte erro de syntax: consulta SQL: CREATE PROCEDURE insereCli( ) BEGIN DECLARE v1 INT DEFAULT 2; Mensagens do MySQL : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 Ja to ficando doido com isso, estou usando o phpmyadmin do meu servidor local, será que pode ser ele? Preciso terminar isso para apresentar um trabalho na segunda e já estou ficando louco. --------------------------Edit------------------------------------------- Bom agora finalmente eu consegui fazer o procedimento funcionar, o problema era que eu nao coloquei o delimiter no inicio no fim da procedure, meu problema agora é só descobrir agora como concatenar o contador junto com o valor nome para ser inserido "nome 1, nome 2, ..." DELIMITER $$ CREATE PROCEDURE insereCli() BEGIN DECLARE v1 INT DEFAULT 10; WHILE v1 <= 50 DO INSERT INTO cliente (idCliente, nome) VALUES (v1, 'Nome'v1); SET v1 = v1 + 1; END WHILE; END $$ DELIMITER ; Boa noite amigo. Sim o phpMyAdmin tem essa "frescura" você precisa mudar o delimitador. Aconselho a usar o MySQL-Front ou o MySQL Workbench. As "duas barrinhas" não funcionaram para concatenar? Eu não concateno algo no MySQL há muito tempo, porém no DB2 que uso com frequência elas são Ok. Pelo que eu vi na query acima você removeu elas, chegou a tentar com as mesmas? Fico a disposição, abraço amigo. Compartilhar este post Link para o post Compartilhar em outros sites