2017-07-03 108 views
2

我正在使用Firebird 2.5並且遇到了一個我自己無法解決的問題。如何使用PLAN更新或插入

有一個使用UPDATE OR INSERT INTO的聲明。我想讓它使用一個特定的執行計劃。但是 - 不管我在哪裏放置PLAN - 我得到以下錯誤消息(行號與PLAN的位置不同而不同):

無效令牌。
動態SQL錯誤。
SQL錯誤代碼= -104。
令牌未知 - 第2行第5列。
計劃。

我沒有找到有關的PLANUPDATE OR INSERT INTOcorresponding documentation使用任何東西。

我的問題方面:它甚至可以一起使用它們嗎?這是否工作或計劃在更高版本的Firebird中工作?有沒有明顯的原因,它不起作用,我沒有看到?有哪些替代方法可以規避這種情況?

+0

你爲什麼要「使用特定的執行計劃」? –

+0

@EstebanP。有一個對應的索引匹配該語句的「匹配」子句。我希望Firebird能夠使用它,而不管當前的索引選擇性,因爲這可能已經過時,我知道它是這個語句的最佳索引。此外,我喜歡索引的依賴關係。 –

+0

其實,我明白,可能沒有*需要*來使用「計劃」。我只是想知道,爲什麼不可能 - 在這種情況下使用它。 –

回答

1

在Firebird 2.5中不可能做到這一點(在3.0中也是不可能的)。望着parser definition,在PLAN子句僅支持:

對於merge聲明應該可以指定源計劃(如果它是一個select查詢),但不是合併本身。計劃條款沒有爲update or insert定義(例如,也不是insert)。

據我所知,沒有什麼計劃將此添加到Firebird 4.您應該考慮在跟蹤器中添加改進票據,但我不知道這是否甚至可能。