2011-04-26 28 views
0

我想要一个存储过程来创建一个临时表,使用数据填充表,然后返回表。这是我的:为什么这个MySQL存储过程不按照我的要求工作?

CREATE PROCEDURE sp_create_r3(p_panel_id INT) 
BEGIN 
    -- create new temporary table 
    DROP TABLE IF EXISTS temp; 
    CREATE TEMPORARY TABLE temp(assembly_id INT, cost1 DECIMAL(10,2), cost2 DECIMAL(10,2)); 

    -- populate table 
    SELECT sf_assembly_breakdown(assembly_id) AS dummy FROM panel_assembly WHERE panel=p_panel_id; 

    -- return table 
    SELECT * FROM temp; 
END 

CREATE FUNCTION sf_assembly_breakdown (p_assembly_id INT) RETURNS INT 
BEGIN 
    DECLARE cost1 DECIMAL(10,2); 
    DECLARE cost2 DECIMAL(10,2); 

    -- calculate cost1, cost2 here 
    ... 


    -- insert data into temporary table 
    INSERT INTO temp SELECT p_assembly_id , cost1, cost2; 

    -- return dummy value 
    RETURN NULL; 
END 

虽然这并不奏效!由sp_create_r3返回的结果集是生成者:

SELECT sf_assembly_breakdown(assembly_id) AS dummy FROM panel_assembly WHERE panel=p_panel_id; 

我不想返回这个。我想返回SELECT * FROM temp;

这可能吗?如果不是什么选择?

回答

0

您的例程将返回尽可能多的数据集,因为其中包含SELECT语句。因此,返回的第一个数据集是您所指示的,而第二个数据集是您想要的。

我知道有C和PHP的API可以处理从例程返回的多个结果集,但是如果您不使用其中任何一个,那么您可能需要查找符合您的需求。

1

我建议你设置了临时表是不同的:

create temporary table temp select p_assembly_id, cost1, cost from panel_assembly where panel=p_panel_id; 

或使用SELECT ... INTO语法。

相关问题