Ir para conteúdo

POWERED BY:

Arquivado

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

fc_consoni

como criar uma stored procedure no mysql 5

Recommended Posts

Olá pessoal! comecei a mexer em triggers e procedures hj, to usando o mysql 5, ta funcionando direitinho,pois testei com procedures prontas que achei na net.

 

vou colocar a tabela e a procedure:

 

tenho essa tabela ai...

 

CREATE TABLE `notas` (

`id_nota` int(11) unsigned NOT NULL default '0',

`cd_prof` int(11) NOT NULL,

`cd_alu` int(11) NOT NULL,

`cd_bim` int(11) NOT NULL,

`nota` float NOT NULL,

`ano` char(4) NOT NULL,

PRIMARY KEY (`id_nota`,`cd_prof`,`cd_alu`,`cd_bim`,`ano`),

KEY `cd_prof` (`cd_prof`),

KEY `cd_alu` (`cd_alu`),

KEY `cd_bim` (`cd_bim`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

e criei essa procedure abaixo

 

DELIMITER $$

DROP PROCEDURE IF EXISTS notafacil.pr_notas $$

CREATE PROCEDURE notafacil.pr_notas ( OUT total INT, IN professor INT, IN aluno INT, IN bimestre INT, IN ano CHAR(4) )

 

BEGIN

 

select max(id_nota) into total from notas where cd_prof=professor and cd_alu=aluno and cd_bim=bimestre and ano='ano';

 

END $$

 

o que eu quero é o seguinte:

selecionar o maior id_nota e quardar numa variavel dentro da propria procedure quando cd_prof=professor , cd_alu=aluno, cd_bim=bimestre ano='ano' sendo que professor, aluno, bimestre,ano são passado por parametro. Apos achar o maior id_nota, referente a combinação daquela chave, a procedure de um INSERT na tabela notas repetindo os mesmos valores da linha que foi consultada,porem com o id_nota + 1, ou seja se o maior id_nota de uma linha for 3, a proxima linha enserida terá id_nota = 4.

 

Pessoal como to apenas começando em mexer nisso, não sei se os parametros estão sendo passados corretamente, nem como puxar um dado de uma consulta SQL e quardar dentro de uma variavel, gostaria que vcs desse uma olhada em todo o codigo, pra ta uma analizada em minhas mancadas!

 

Galera deste já o meu muito obrigado e um forte abraço a todos da comunidade imasters!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do jeito que você está fazendo, está guardando na variável do parametro, total.

 

Então se você fizer:

CALL pr_notas(@total, ...);
E em seguida:

SELECT @total FROM dual;
Você terá o total obtido na query da procedure.

 

 

E dentro da procedure, você pode utilizar no INSERT através da variável total normalmente.

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.