Création de tables temporaires dans la procédure stockée MySQL
la procédure suivante me donne une erreur quand je l'invoque en utilisant L'énoncé D'appel:
CREATE DEFINER=`user`@`localhost` PROCEDURE `emp_performance`(id VARCHAR(10))
BEGIN
DROP TEMPORARY TABLE IF EXISTS performance;
CREATE TEMPORARY TABLE performance AS
SELECT time_in, time_out, day FROM attendance WHERE employee_id = id;
END
Le message d'erreur indique Inconnu "de la table "performance "" .
c'est la première fois que J'utilise des procédures stockées et J'ai obtenu mes sources de Google. Je juste ne peux pas comprendre ce que je fais de mal.
2 réponses
j'ai fait un peu de rangement pour vous et j'ai ajouté du code d'exemple. Je garde toujours les noms de mes paramètres identiques à ceux des champs qu'ils représentent, mais le préfixe avec p_ évite les problèmes. Je fais la même chose avec les variables déclarées dans le corps sproc mais préfixe avec v_.
vous pouvez trouver un autre de mes exemples ici:
drop procedure if exists emp_performance;
delimiter #
create procedure emp_performance
(
in p_employee_id varchar(10)
)
begin
declare v_counter int unsigned default 0;
create temporary table tmp engine=memory select time_in, time_out
from attendance where employee_id = p_employee_id;
-- do stuff with tmp...
select count(*) into v_counter from tmp;
-- output and cleanup
select * from tmp order by time_in;
drop temporary table if exists tmp;
end#
delimiter ;
call emp_performance('E123456789');
par défaut la variable de configuration MySQL sql_notes est définie à 1.
cela signifie que
DROP TEMPORARY TABLE IF EXISTS performance;
incréments warning_count par un et vous obtenez un avertissement quand une procédure stockée se termine.
vous pouvez définir sql_notes variable à 0 dans my.cnf ou de réécriture de la procédure stockée comme ça:
CREATE DEFINER=`user`@`localhost` PROCEDURE `emp_performance`(id VARCHAR(10))
BEGIN
SET @@session.sql_notes = 0;
DROP TEMPORARY TABLE IF EXISTS performance;
CREATE TEMPORARY TABLE performance AS
SELECT time_in, time_out, day FROM attendance WHERE employee_id = id;
SET @@session.sql_notes = 1;
END