English 中文(简体)
在MySQL创建表格
原标题:Create table variable in MySQL
  • 时间:2009-10-06 10:47:46
  •  标签:

I need a table variable to store the particular rows from the table within the MySQL procedure. E.g. declare @tb table (id int,name 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 .... */

http://forums.mysql.com/read.php?60,78789,225701#msg-225701”rel=“noreferer” MySQL here

"You can use the TEMPORARY keyword when creating a table. A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. This means that two different connections can use the same temporary table name without conflicting with each other or with an existing non-TEMPORARY table of the same name. (The existing table is hidden until the temporary table is dropped.)"

回答你的问题:没有,MySQL不以服务器(http://msdn.microsoft.com/en-us/library/ms188927.aspx)提供的同样方式支持表型变量。 Oracle提供了类似的功能,但将其称为Cursor类型,而不是表格类型(http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems012.htm)。

根据你的需要,你可以采用类似于Oracle和SQL提供的方式,模拟MySQL中的表格/变式变量。

然而,临时表格办法与表格/证券类型变量办法之间有着重要的差别,而且对业绩产生了许多影响(这就是为什么Oracle和服务器提供这种功能的原因,超出了临时表格提供的范围)。

具体来说:表/证券类变量使客户能够核对客户方面的多个数据,并将数据输入服务器,作为对存储程序或编制报表的投入。 消除的就是每行各行的间接费用,而是支付每行一流的间接费用。 当你试图进口更多数据时,这会对总体业绩产生重大影响。

可能的工作范围:

你们可能想尝试的是建立一个临时表格,然后利用一个联络处(http://dev.mysql.com/doc/refman/5.1/en/load-data.html),将数据输入临时表格。 然后,你可以把临时桌子的名字输入你储存的程序。 这仍然导致向数据库服务器发出两条电话,但如果你正在调动足够的浏览量,则可能会有节余。 当然,只有在你更新目标表时,你在所储存的程序内采取某种逻辑,这才是真正有益的。 否则,你可能只是想把《非洲农业发展组织》直接纳入目标表。

马达加斯加

MYSQL 8支持JSON表格,因此,你可以把结果装入一个JSON变量,并利用JSON_TABLE(ALE)的指挥从该变量中挑选。

如果你不想在数据库中储存表格,那么“Evan Todd”已经提供了临时表格解决办法。

但是,如果你需要为其他用户提供桌子,并希望在桶内存放,那么你可以采用以下程序。

如下:“储存程序”:

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 ;

。———–

现在,你可以执行这一程序,按下表列出一个可变的名称表。

• 电话:可变性:

在执行以下指挥后,你可以检查新的桌子。

使用测试;像“%zafar%”这样的how;测试在这里是“数据库”的名称。

你们还可以在以下的道路上检查更多的细节:





相关问题
热门标签