2015-04-08 3 views
0

Когда я вызываю функцию MySQL: 'modulo_usuario_verificar_usuario_subset_usuario' какНе удается повторно открыть временную таблицу

SELECT id FROM usuario WHERE modulo_usuario_verificar_usuario_subset_usuario(3, id); 

MySQL жалуется:

ERROR 1137 (HY000): Can't reopen table: 'temp_modulo_usuario_obter_organizacoes_usuario' 

Функция 'modulo_usuario_verificar_usuario_subset_usuario' что-то вроде этого:

FUNCTION `modulo_usuario_verificar_usuario_subset_usuario`(in_super_usuario int unsigned, in_sub_usuario int unsigned) 
RETURNS int(11) 
DETERMINISTIC 
BEGIN 
.....some code here .... 

//This SP drops, creates, and populates the temporary table:temp_modulo_usuario_obter_organizacoes_usuario 
call modulo_usuario_obter_organizacoes_usuario_c(in_super_usuario); 

//Using the temporary table previously created 
return (select not exists (select * 
        from sub_set 
        where sub_set.org_id not in ( select super_set.org_id 
                from temp_modulo_usuario_obter_organizacoes_usuario as super_set)) as super_usuario); 

END 

Где именно я повторно использую временные таблицы? Я понимаю, что внутри функции он используется один раз и в предложении select, которое вызывает функцию, функция создает новую временную таблицу

EDIT: Я только нашел хороший ответ, почему я не могу это сделать:

Calling a procedure inside a function throws MySQL ERROR 1422

+0

К сожалению, вы не можете повторно использовать временные таблицы: https://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html – nomistic

ответ

0

Вы находитесь в сохраненной функции. Возможно, вы используете таблицу tmp в запросе, вызывающем функцию. Или что у вас есть CALL. Или в другом вызове функции.

Смежные вопросы