Создать переменную таблицы в MySQL

Мне нужна переменная таблицы для хранения определенных строк из таблицы в процедуре MySQL . Например, declare @tb table (id int, имя varchar (200))

Это возможно? Если да, то как?

    Они не существуют в MySQL, не так ли? Просто используйте временную таблицу:

    CREATE PROCEDURE my_proc () BEGIN CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100)); INSERT INTO TempTable SELECT tblid, tblfield FROM Table1; /* Do some more stuff .... */ 

    Из MySQL здесь

    «Вы можете использовать ключевое слово TEMPORARY при создании таблицы. Таблица TEMPORARY видна только текущему соединению и автоматически отбрасывается при закрытии соединения. Это означает, что два разных соединения могут использовать одно и то же имя временной таблицы, не конфликтуя с каждым другой или с существующей таблицей без ТЕМПОРТА с тем же именем (существующая таблица скрыта до тех пор, пока временная таблица не будет удалена.) ”

    Возможно, временная таблица будет делать то, что вы хотите.

     CREATE TEMPORARY TABLE SalesSummary ( product_name VARCHAR(50) NOT NULL , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00 , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00 , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 ) ENGINE=MEMORY; INSERT INTO SalesSummary (product_name, total_sales, avg_unit_price, total_units_sold) SELECT p.name , SUM(oi.sales_amount) , AVG(oi.unit_price) , SUM(oi.quantity_sold) FROM OrderItems oi INNER JOIN Products p ON oi.product_id = p.product_id GROUP BY p.name; /* Just output the table */ SELECT * FROM SalesSummary; /* OK, get the highest selling product from the table */ SELECT product_name AS "Top Seller" FROM SalesSummary ORDER BY total_sales DESC LIMIT 1; /* Explicitly destroy the table */ DROP TABLE SalesSummary; 

    От forge.mysql.com . См. Также временные таблицы этой статьи .

    Чтобы ответить на ваш вопрос: нет, MySQL не поддерживает типизированные в таблице переменные таким же образом, что и SQL Server (http://msdn.microsoft.com/en-us/library/ms188927.aspx). Oracle обеспечивает аналогичную функциональность, но называет их типами курсора вместо типов таблиц (http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems012.htm).

    В зависимости от ваших потребностей вы можете моделировать переменные таблицы / курсора в MySQL с использованием временных таблиц так же, как и Oracle и SQL Server.

    Тем не менее, существует существенное различие между временным табличным подходом и переменным подходом, основанным на таблице / курсоре, и оно имеет множество последствий для производительности (именно по этой причине Oracle и SQL Server предоставляют эту функциональность сверх того, что предоставляется временным таблицы).

    В частности: переменные с таблицей / курсором позволяют клиенту сопоставлять несколько строк данных на стороне клиента и отправлять их на сервер в качестве входных данных в хранимую процедуру или подготовленный оператор. Это устраняет накладные расходы на отправку каждой отдельной строки и вместо этого оплачивает эту накладную один раз для партии строк. Это может оказать значительное влияние на общую производительность при попытке импортировать большее количество данных.

    Возможная обстановка:

    Вы можете попытаться создать временную таблицу и затем использовать команду LOAD DATA (http://dev.mysql.com/doc/refman/5.1/en/load-data.html) для streamовой передачи данных во временную Таблица. Затем вы можете передать им имя временной таблицы в хранимую процедуру. Это все равно приведет к двум вызовам сервера базы данных, но если вы перемещаете достаточно строк, там может быть экономия. Конечно, это действительно полезно, если вы выполняете какую-то логику внутри хранимой процедуры при обновлении целевой таблицы. Если нет, вы можете просто захотеть ЗАГРУЗИТЬ ДАННЫЕ непосредственно в целевой таблице.

    Если вы не хотите хранить таблицу в базе данных, тогда @Evan Todd уже предоставляется временное решение таблицы.

    Но если вам нужна эта таблица для других пользователей и вы хотите сохранить ее в db, вы можете использовать нижеприведенную процедуру.

    Создайте ниже «хранимую процедуру»:

    ————

     DELIMITER $$ USE `test`$$ DROP PROCEDURE IF EXISTS `sp_variable_table`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_variable_table`() BEGIN SELECT CONCAT('zafar_',REPLACE(TIME(NOW()),':','_')) INTO @tbl; SET @str=CONCAT(“create table “,@tbl,” (pbirfnum BIGINT(20) NOT NULL DEFAULT '0′, paymentModes TEXT ,paymentmodeDetails TEXT ,shippingCharges TEXT ,shippingDetails TEXT ,hypenedSkuCodes TEXT ,skuCodes TEXT ,itemDetails TEXT ,colorDesc TEXT ,size TEXT ,atmDesc TEXT ,promotional TEXT ,productSeqNumber VARCHAR(16) DEFAULT NULL,entity TEXT ,entityDetails TEXT ,kmtnmt TEXT ,rating BIGINT(1) DEFAULT NULL,discount DECIMAL(15,0) DEFAULT NULL,itemStockDetails VARCHAR(38) NOT NULL DEFAULT ”) ENGINE=INNODB DEFAULT CHARSET=utf8″); PREPARE stmt FROM @str; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT 'Table has been created'; END$$ DELIMITER ; 

    —————-

    Теперь вы можете выполнить эту процедуру для создания таблицы имен переменных, как показано ниже,

    вызов sp_variable_table ();

    Вы можете проверить новую таблицу после выполнения ниже команды-

    использовать тест, показывать таблицы типа «% zafar%»; – test – это имя базы данных.

    Вы также можете проверить более подробную информацию по адресу ниже,

    http://mydbsolutions.in/how-can-create-a-table-with-variable-name/

    Не решение вопроса, а еще одна простая альтернатива. если таблица представляет собой одну таблицу столбцов, которую вы хотите, тогда выведите параметр строки, объединив значения и извлеките внутри SP.

    Давайте будем гением компьютера.