2011-04-26 67 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語法。

相關問題