Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DunkMask

Criar procedure

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.