Ir para conteúdo

POWERED BY:

Arquivado

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

Deise Vicky

[Resolvido] Criar Stored Procedure

Recommended Posts

Estou tendo problemas ao criar uma Stored Procedure no MySql 5.1

 

Segue o que estou tentando fazer:

create procedure Insert_Cargo(IN vNomeCargo varchar(100), IN vIndicadorAtivo bit)
begin
   insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo);
end;

 

Vi alguns exemplos na net que se faz dessa forma, mas dá o seguinte erro:

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 'end' at line 1

 

Já tentei fazer sem colocar o 'IN' antes dos parâmetros da procedure, mas dá o mesmo erro!

Alguém sabe me dizer o que tá errado aí? Porque eu não trabalho com MySql, então fica meio complicado entender esses erros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

será o fim da linha?

 

troca:

create procedure Insert_Cargo(IN vNomeCargo varchar(100), IN vIndicadorAtivo bit)
begin
   insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo);
end;

 

 

por:

create procedure Insert_Cargo(IN vNomeCargo varchar(100), IN vIndicadorAtivo bit)
begin
   insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo)
end;

 

nesta linha insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo);, o ; está a mais, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

será o fim da linha?

 

troca:

create procedure Insert_Cargo(IN vNomeCargo varchar(100), IN vIndicadorAtivo bit)
begin
   insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo);
end;

 

 

por:

create procedure Insert_Cargo(IN vNomeCargo varchar(100), IN vIndicadorAtivo bit)
begin
   insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo)
end;

 

nesta linha insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo);, o ; está a mais, não?

Então amigo, tentei fazer de várias formas, até como está no manual do MySQL 5.1 nesse site e não rolou:

 

Tentei assim também e não deu certo:

delimiter |
create definer = 'root'@'localhost' procedure Insert_Cargo(IN vNomeCargo varchar(100), IN vIndicadorAtivo bit)
begin
   insert into cargo (NomeCargo, IndicadorAtivo) values (vNomeCargo, vIndicadorAtivo);
end|

 

Já verifiquei as permissões do usuário e vi que possuo permissão para criar a procedure, mas não to conseguindo...mas é exatamente o que você disse, o banco sempre entende que o ';' é o fim da linha, por mais que eu coloque o 'delimiter' ele parece não enxergar isso...

 

Atualmente eu uso o MySQL Front para acessar os dados do banco, será que tem alguma coisa a ver?

Porque por exemplo não consigo criar um banco de dados pelo MySQL Front..apesar de eu ter tentando uma vez criar a procedure pelo prompt e não deu certo também, talvez pode ser isso....

Compartilhar este post


Link para o post
Compartilhar em outros sites

começo a ver que tem muitos problemas com o sistema em si. será melhor fazer backup do que tem, desinstalar, limpar no regedit, reiniciar o pc e voltar a instalar de novo...

 

acho que é o melhor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

começo a ver que tem muitos problemas com o sistema em si. será melhor fazer backup do que tem, desinstalar, limpar no regedit, reiniciar o pc e voltar a instalar de novo...

 

acho que é o melhor...

Bom...enfim,consegui criar uma procedure!

Não é exatamente da forma que eu queria, mas pelo menos rolou.

Fui pelo MySQL Command Client, e fiz da seguinte forma (exemplo que consta no manual do MySQL):

-> delimiter //
-> create function simpleproc (OUT param1 INT)
-> begin
->    select COUNT(*) into param1 from cargo;
-> end//

 

Depois eu faço isso:

-> call simpleproc(@a)//

 

Depois chamo a procedure:

-> select @a//

 

Dessa forma consegui criar a procedure de select.

Quando executo o comando

show create procedure simpleproc\G;

ele me mostra o código da minha procedure.

Agora só falta eu conseguir criar uma procedure de inserção no banco, mas acho que estou no caminho certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

é bom "partir a cabeça" de vez em quando... sempre se aprende. depois, não esqueça de postar a solução, sempre ajuda a comunidade!!!

 

Cara, eu acredito que seja um simples detalhe de sintaxe. Segue abaixo o que eu consegui:

-> delimiter //    --acredito que aqui tenha que ter um espaço entre o 'delimiter' e o '//'
-> create procedure insert_cargo (IN vNomeCargo varchar(100))
-> begin
->    insert into cargo (NomeCargo) values (vNomeCargo); end//     --aqui não deve ter espaço entre 'end' e '//'

 

Dessa forma deu certo.

Lembrando que criei a proc pelo MySQL Command Line...

Valeu!

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.