ВЫБОР данных из хранимых процедур - PullRequest
2 голосов
/ 21 декабря 2010

У меня сложный запрос SELECT, который фильтрует по временному диапазону, и я хочу, чтобы этот временной диапазон (даты начала и окончания) можно было задавать с помощью пользовательских параметров.Таким образом, я могу использовать хранимую процедуру для этого, и возвращаемое значение представляет собой набор из нескольких строк.Проблема, которую я имею, состоит в том, как бороться с этим набором результатов впоследствии.Я не могу сделать что-то вроде:

SELECT * FROM (CALL stored_procedure(start_time, end_time))

, хотя хранимая процедура это просто SELECT, который принимает параметры.Подготовленные операторы на стороне сервера также не работают (и они не являются постоянными).Некоторые предлагают использовать временные таблицы;причина, по которой это не идеальное решение, состоит в том, что 1) я не хочу указывать схему таблицы, и кажется, что вы должны, и 2) время жизни временной таблицы будет ограничено только вызовом запроса, этоне нужно упорствовать после этого.

Итак, подведем итог: я хочу что-то вроде постоянного подготовленного оператора на стороне сервера, чей возврат - это набор результатов, которыми MySQL может манипулировать, как если бы это был подзапрос.Есть идеи?Спасибо.

Кстати, я использую MySQL 5.0.Я знаю, что это довольно старая версия, но в более поздней версии ее нет.Я не уверен, возможен ли ВЫБОР из хранимой процедуры в других механизмах SQL;в настоящее время переключение не является вариантом, но я хотел бы знать, возможно ли это в любом случае, если мы решим переключиться в будущем.

1 Ответ

1 голос
/ 21 декабря 2010

Выбор из функций возможен в других двигателях.Например, Oracle позволяет вам написать функцию, которая возвращает таблицу определенного пользователем типа.Вы можете определить наборы результатов в функции, заполнить их с помощью запросов или даже с помощью комбинации выбора и кода.В конце концов, набор результатов может быть возвращен из функции, и вы можете продолжить запрос по нему, используя:

select * from table(FunctionToBeCalls(parameters));

Единственный недостаток, это то, что этот набор результатов не проиндексирован, поэтому он может быть медленнымесли функция используется в сложном запросе.

В MySQL ничего подобного невозможно.Невозможно использовать набор результатов из процедуры непосредственно в запросе выбора.Вы можете возвращать отдельные значения из функции, и вы можете использовать OUT или INOUT параметры для вашей процедуры возврата значений из.Но полный набор результатов не представляется возможным.Заполнение временной таблицы в вашей процедуре является ближайшим к вам.

...