2014-06-12 198 views
0

這是一個Teradata v14特定問題。將選擇語句的結果存儲在存儲過程中

如何在存儲過程中存儲查詢結果以供進一步處理。

選項我已經看過:

  • 揮發性臨時表 - 但是,這需要先於存儲 過程
  • 派生表創建 - 但只適用於一個查詢
  • 的時間結果

結果需要在存儲過程的持續時間內可用。

還有其他的選擇嗎?

更新2014年6月16日: 根據答案和評論似乎揮發性表是最好的答案。然而,然後我們嘗試使用易失性表存儲過程抱怨該表不存在。有沒有解決的辦法?

+0

你的意思是你想存儲數據以便在你的proc中進一步處理嗎?這是什麼意思,在程序之前需要創建易失性表格?您只需在過程中聲明該表。 – Andrew

+0

@Andrew:是的,我的意思是我想在存儲過程中進行處理。存儲過程可以同時執行多次。在存儲過程中聲明易失性表會拋出一個錯誤,指出該表不存在。 – L4zl0w

+1

不,揮發性表不是最好的答案。 Rob建議使用全局臨時表。在你創建你的SP之前創建它**(你也可以在你的SP中創建它,並捕獲「表已存在」的錯誤,但它不值得在源代碼中的開銷),在你的SP中你只需使用它像任何其他表一樣,每個會話都會有它自己的物化實例。 – dnoeth

回答

1

您是否考慮過全球臨時表?

表定義存儲在DBC數據字典中,並在被SQL引用時爲會話持續時間實例化。像易失性表一樣,全局臨時表也是會話特定的。與易失性表不同,全局臨時表依賴於用戶的臨時空間而不是假脫機空間。

+0

謝謝,我有,但在存儲過程內創建表似乎會拋出一個錯誤,指出表不存在。另外,如果存儲過程同時啓動多次,會發生什麼情況? (不一定在同一個會話中) – L4zl0w

+1

如果我的回覆不清楚,我表示歉意 - 在存儲過程之外創建全局臨時表。然後,您可以根據需要在存儲過程中簡單地引用它。 –

+2

GTT的每個「實例」都是特定於會話的,所以如果多個用戶同時執行proc,他們將分別擁有一個單獨的GTT實例。 – Andrew