Я хотел бы использовать хранимую процедуру для определения предложения IN оператора select. Это (упрощенная версия), что я пытаюсь сделать:
SELECT * FROM myTable WHERE columnName IN ( CALL myStoredProc )
myStoredProc
выполняет сложную логику в базе данных и возвращает список возможных совпадающих значений для columnName
. Вышеприведенное утверждение не работает явно. Оператор select может быть выполнен в другой сохраненной программе, если это имеет значение.
Возможно ли это в mySQL?
Какой тип возвращаемого значения имеет текущая хранимая процедура? Вы говорите о "списке", поэтому ТЕКСТ?
Может быть, есть более простой способ, но одна вещь, которую вы можете сделать (внутри другой хранимой процедуры), - это построить еще один запрос.
Для этого нам нужно обойти два ограничения MySQL: a) Чтобы выполнить динамический SQL внутри хранимой процедуры, он должен быть подготовленным оператором. б) Подготовленные утверждения могут создаваться только из пользовательских переменных. Итак, полный SQL:
SET @the_list = myStoredProc();
SET @the_query = CONCAT('SELECT * FROM myTable WHERE columnName IN (' , @the_list , ')');
PREPARE the_statement FROM @the_query;
EXECUTE the_statement;
Если вы говорите о возврате набора результатов из хранимой процедуры, а затем используете его как таблицу, это невозможно. Вам нужно создать временную таблицу для работы это ограничение.