2015-10-14 109 views
0

在下一個示例過程中,我是否可以將查詢表中的行作爲過程結果集輸出,同時將單個字段或某些字段存儲在變量中(與使用SELECT INTO時類似)?我可以想象的唯一方法是重複查詢。有什麼方法可以同時存儲SELECT結果並輸出結果集?

CREATE PROCEDURE `Panel_TerminalesForm`(IN idTerminal INT) 
    BEGIN 
    declare somefield INT: 
    -- this select statement returns the found row as a resultset 
    SELECT terminales.* 
    FROM terminales 
    WHERE id_terminal = idTerminal; 
    -- but I also want to have here a table field inside the variable somefield 
    -- do some manipulation with somefield... 
END; 
+0

我不知道我是否正確理解你,但似乎你需要的是臨時表。 – Japongskie

+0

我正在尋找一些方法來告訴MySQL「請做一個SELECT INTO我的變量,但也oputput結果集」,但我恐怕我不能,所以這個可能性很可能是一個有效的解決方案。如果您將它作爲anser發佈並且代碼正在工作,我不會懷疑將其標記爲正確 –

+0

我發佈了一個答案,結果與您的查詢相同,但是現在您可以在臨時表中執行任何操作目的而不影響orig /物理表。 – Japongskie

回答

1

如果我理解正確的話,你需要創建一個臨時表,那麼你可以操縱臨時你想要的方式。

MySQL的:

CREATE PROCEDURE `Panel_TerminalesForm`(IN idTerminal INT) 
     BEGIN 
      declare somefield INT 

      CREATE TEMPORARY TABLE SampleTempTable 
      SELECT * INTO SampleTempTable FROM terminales WHERE id_terminal = idTerminal; 

      -- output the resultset 
      SELECT * FROM SampleTempTable 

      -- read the variables you want 
      SELECT field INTO somefield FROM SampleTempTable 

      -- Drop the temp table 
      DROP TEMPORARY TABLE SampleTempTable 
    END; 

http://www.mysqltutorial.org/mysql-temporary-table/

SQL服務器:

CREATE PROCEDURE `Panel_TerminalesForm`(IN idTerminal INT) 
     BEGIN 
      declare somefield INT 

      SELECT terminales.* 
      INTO #tempSample FROM terminales 
      WHERE id_terminal = idTerminal; 

      SELECT * FROM #tempSample 

      -- Drop the temp table 
      DROP TABLE #tempSample 
    END; 

注意:刪除使用它,以避免錯誤後的臨時表。

+0

尖括號語法是否爲臨時表的有效MySQL語法?我認爲這不是 –

+0

這看起來更像是SQL Server語法。 –

+0

我修改了臨時表的MySQL語法的答案。 – Japongskie