2016-12-14 2 views
0

Если у меня есть результат подготовленного оператора; как использовать его в качестве источника моего запроса?Использование результата подготовленного оператора в виде временной таблицы в запросе

CALL `myProcedure`; 

PREPARE stmnt FROM @allSQL; 

EXECUTE stmnt; 

DEALLOCATE PREPARE stmnt; 

Таким образом, я получаю выход из EXECUTE stmnt; (назовем его tmp), и я хотел бы выполнить запрос по линиям:

SELECT * FROM (EXECUTE stmnt) AS tmp WHERE this = that; 
+0

Я не думаю, что вы можете это сделать. Вам нужно подготовить весь запрос, а не подзапрос. – Barmar

+0

@Barmar, это мой страх :( – matthias

+0

@matthias - почему вы не подготовили оператор дырки, например: ** CALL 'myProcedure'; SET @allSQL: = CONCAT ('SELECT * FROM (', @ allSQL, ') AS TMP WHERE это =, что '); ГОТОВИТ stmnt ИЗ @allSQL; ВЫПОЛНИТЬ stmnt; DEALLOCATE ГОТОВИТ stmnt; ** –

ответ

2

Вы могли бы подготовить CREATE TEMPORARY TABLE заявление, содержащее результат запроса:

SET @createSQL = CONCAT('CREATE TEMPORARY TABLE tmp AS ', @allSQL); 
PREPARE stmt FROM @createSQL; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

SELECT * FROM tmp WHERE this = that; 
+0

, похоже, что-то не так с этим инструктором подготовки. Это вызывает и ошибку. – matthias

+0

Какая ошибка? – Barmar

+0

По какой-то причине вы невозможно создать непосредственно из вызова функции, мне пришлось сначала назначить его переменной. – Barmar