2016-03-06 97 views
1

是否有可能在存儲過程中有2條FOR SELECT語句,其中第1條語句將顯示其所有數據,然後當第1條語句完成時第2條語句將繼續。在SP中執行兩條FOR SELECT語句firebird

我已經嘗試過這一個:

for select id,date,particular 
from TABLE_NAME 
    into :id, :date, :particular 
do begin 
    suspend; 
end 

for select id,date,payor 
from TABLE_NAME 
    into :id, :date, :payor 
do begin 
    suspend; 
end 

的第一條語句執行良好,但第二條語句顯示列特別是第一次聲明中的一些數據。

回答

1

這是可能的,但有你需要考慮兩件事情:

  1. 可選擇的存儲過程只有一個結果集,所以客戶端是不可能檢測到這種不某種鑑別器列。
  2. 如果您不重新分配值,則會爲每個後續行返回最後分配的值。

此第二項是你所遇到的問題,爲了解決這個問題,需要通過將第一之間的線路particular = null;清除的particular的值,例如,選擇for select ..塊:

for select id,date,particular 
from TABLE_NAME 
    into :id, :date, :particular 
do begin 
    suspend; 
end 

particular = null; 

for select id,date,payor 
from TABLE_NAME 
    into :id, :date, :payor 
do begin 
    suspend; 
end 

但是,如果問題中的代碼是實際代碼,則可能需要考慮使用視圖,而不是兩個選擇組合union all。這可能會減少開銷。