MySql хранимая процедура выбора таблицы - PullRequest
1 голос
/ 30 октября 2009

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

Можно ли выбрать таблицу для работы на основе параметра (пример ниже)? (Это спасло бы меня от нескольких похожих копий одной и той же процедуры).


DELIMITER $$

DROP PROCEDURE IF EXISTS `dostuff` $$
CREATE PROCEDURE `dostuff`(IN prod_code VARCHAR(10))
BEGIN

IF INSTR(prod_code, 'product_a') THEN
    myTable = product_a_table
ELSE IF INSTR(prod_code, 'product_b') THEN
    myTable = product_b_table
END IF

-- do stuff on myTable such as SELECT and UPDATE

END $$

DELIMITER ;

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

Можно создать команду, подобную этой:

SET @query := CONCAT("REPAIR TABLE ", @tableName);             
PREPARE stmt FROM @query;             
EXECUTE stmt;             
DEALLOCATE PREPARE stmt;   

Как видите, в эту команду можно вставить любую строку / переменную, которую вы хотите (используя переменные, где бы вы ни хотели.

0 голосов
/ 30 октября 2009

Я думаю, что на самом деле проблема в том, имеет ли ваша база данных требуемый уровень нормализации. Почему «ProductGroup» не является полем в таблице продуктов sinlge, что позволяет вам выбирать строки, в которых ProductGroup имеет определенное значение?

0 голосов
/ 30 октября 2009

Я считаю, что невозможно иметь имена таблиц переменных в запросе.

Наш собственный Билл Карвин объясняет здесь

Имена таблиц, столбцов и т. Д. Не могут быть динамичными, как вы описать. Это не разрешено языком SQL по многим причинам.

Например, оптимизатор запросов не сможет решить, какой индекс (ы) использовать, если он не знает во время разбора, какие таблицы и столбцы запрашиваются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...