考慮下面的 PL/SQL 代碼,這段代碼生成一個 XML 格式的矩陣樣式的報表:
| 以下為引用的內容: declare |
假如在這個例子中 parts 和 countries 有很多行數據,那么性能就會趨于下降。這是因為,在 PL/SQL 中,每次碰到一個游標 FOR 循環,在重新查詢并獲得數據時,都會有一個切換到 SQL 的上下文切換。
以一些服務器端內存為代價,提高這種構造的速度是有可能做到的——假如動態構建 PL/SQL 數據表和矩陣單元格條目就可以提高速度。例如:
| 以下為引用的內容: declare |
游標
游標的 FOR 循環現在是獨立運行的,并且特定記錄、特定字段、特定單元格的數據被拷貝到三個 PL/SQL 表中。
然后利用記錄和字段具有特定順序這一事實,將結果構建到一個 PL/SQL 表的矩陣中。由于 GROUP BY 的隱式 SORT/MERGE 操作,單元格具有同樣的順序。單元格查詢已經被減少到一個查詢,替代了原來的矩陣每個單元格使用一個查詢。
假如字段的數目相當小,那么我們可以使用 BULK COLLECT 構建表。BULK COLLECT 不答應表記錄的填充,所以我們就需要為用于這個操作的每一列數據創建一個獨立的表。前面的例子可以采用 BULK COLLECT 重寫為另外一種形式。
| 以下為引用的內容: declare |
新聞熱點
疑難解答