SQL 參數、SQL 變數及廣域變數的參照
SQL 參數、SQL 變數及廣域變數可以在 SQL 程序陳述式中的任何位置參照,其中可以指定表示式或變數。
無法在 SQL 常式、SQL 觸發程式或動態複合陳述式中指定主變數。 SQL 參數可以在常式主體中的任何位置參照,並且可以使用常式名稱來限定。 SQL 變數可以在宣告它們的複合陳述式中的任何位置參照,並且可以使用在複合陳述式開頭指定的標籤名稱來限定。 如果 SQL 參數或 SQL 變數具有列資料類型,則可以在任何可以參照 SQL 參數或 SQL 變數的位置參照欄位。 只要表示式不需要唯一性,就可以在任何表示式內參照廣域變數。 下列實務需要確定性表示式,這會阻止使用廣域變數:
- 核對限制
- 所產生直欄的定義
- 重新整理立即 MQT
所有 SQL 參數、SQL 變數、列變數欄位及廣域變數都被視為可為空值。 SQL 常式中 SQL 參數、SQL 變數、列變數欄位或廣域變數的名稱,可以與常式中所參照表格或視圖中的直欄名稱相同。 SQL 變數 或列變數欄位 的名稱也可以與相同常式中宣告的另一個 SQL 變數 或列變數欄位 名稱相同。 當在不同的複合陳述式中宣告兩個 SQL 變數時,可能會發生這種情況。 包含 SQL 變數宣告的複合陳述式會決定該變數的範圍。 如需相關資訊,請參閱 複合 SQL (已編譯) 陳述式。
SQL 常式中 SQL 變數或 SQL 參數的名稱可以與某些 SQL 陳述式中使用的 ID 名稱相同。 如果名稱不完整,下列規則說明名稱是參照 ID ,還是參照 SQL 參數或 SQL 變數:
- 在 SET PATH 及 SET SCHEMA 陳述式中,會檢查名稱作為 SQL 參數或 SQL 變數。 如果找不到作為 SQL 變數或 SQL 參數,則會使用它作為 ID。
- 在 CONNECT、DISCONNECT、RELEASE 及 SET CONNECTION 陳述式中,使用名稱作為 ID。
應該明確限定相同的名稱。 定義名稱明確指出名稱是否參照直欄、SQL 變數、SQL 參數、列變數欄位或廣域變數。 如果名稱不完整或仍不明確,則下列規則會說明名稱是否參照直欄、SQL 變數、SQL 參數或廣域變數:
- 如果 SQL 常式主體中指定的表格及概略表在建立常式時存在,則會先檢查名稱作為直欄名稱。 如果找不到作為直欄,則會在複合陳述式中將它勾選為 SQL 變數,然後將它勾選為 SQL 參數,最後將它勾選為廣域變數。
- 如果建立常式時所參照的表格或視圖不存在,則會先檢查名稱作為複合陳述式中的 SQL 變數,然後作為 SQL 參數,然後作為廣域變數。 變數可以在包含參照的複合陳述式內宣告,或在該複合陳述式巢狀的複合陳述式內宣告。 如果兩個 SQL 變數在相同的範圍內且具有相同的名稱 (如果在不同的複合陳述式中宣告它們,則可能會發生此情況) ,則會使用在最內層複合陳述式中宣告的 SQL 變數。 如果找不到,則會假設它是直欄。