SET 變數
SET 變數陳述式會產生由最多一列組成的結果表格,並將該列中的值指派給變數。
呼叫
此陳述式可以內嵌在應用程式中。 如果要設定的所有變數都是廣域變數,則它是可以動態準備的可執行陳述式。 不得在 REXX 中指定。
授權
如果指定 row-fullselect ,請參閱 fullselect ,以取得每一個次選取所需的授權說明。
如果在指派的左側指定廣域變數,則陳述式授權 ID 所保留的專用權必須至少包括下列其中一項:
- 廣域變數的 WRITE 專用權。
- 資料庫管理者權限
語法
說明
- 變數 ...
- 識別一或多個必須根據宣告變數的規則來宣告的變數或主結構 (請參閱 主變數的參照)。 主機結構在邏輯上由變數清單取代,這些變數代表主機結構的每一個元素。
要指派給每一個 變數 的值可以緊接在 變數之後指定,例如: variable = expression, variable = 表示式。 或者,括弧集可用來指定所有 變數 ,然後指定所有值,例如 (variable, variable) = (expression, expression)。
每一個變數的資料類型必須與其對應的結果直欄相容。 每一個指派都根據 指派及比較中說明的規則進行。 指定在相等運算子左側的 變數 數目必須等於指定在相等運算子右側的對應結果中的值數目。 如果值是空值,則必須提供指示器變數。 如果發生指派錯誤,則不會將值指派給變數,也不會再將值指派給變數。 已指派給變數的任何值仍會被指派。
如果由於 表示式 中的算術表示式或次選取的 SELECT 清單 (除零或溢位) 或字元轉換錯誤而發生錯誤,則結果會是空值。 如同任何其他空值案例,必須提供指示器變數。 未定義變數的值。 不過,在此情況下,指標變數會設為 -2。 繼續處理陳述式,就像未發生錯誤一樣。 (不過,會傳回警告。) 如果您未提供指示器變數,則會傳回錯誤。 部分值可能已指派給變數,且在發生錯誤時仍會繼續指派。
- 表示式 或 search-condition
- 指定變數的新值。 表示式 是 表示式中所說明類型的任何表示式。 它不得包含直欄名稱。
如果指定 search-condition ,則不得在 EXISTS 或 IN 述詞中包括子查詢。
- 空值
- 指定變數的新值是空值。
- 預設
- 指定變數的新值是其起始預設值。 DEFAULT 只能指派給廣域變數。 使用 DEFAULT 時, SET 陳述式中只能指定一個變數。
- 列全選
- 傳回單一結果列的全選。 結果直欄值會指派給每一個對應的 變數。 如果全選的結果為無列,則會指派空值。 如果結果中有多列,則會傳回錯誤。
- WITH common-table-expression
- 指定一般表格表示式。 如需一般表格表示式的說明,請參閱 common-table-expression。
- 全選
- 傳回單一結果列的 全選 。 結果直欄值會指派給每一個對應的 變數。 如果 fullselect 的結果為無列,則會指派空值。 如果結果中有多列,則會傳回錯誤。
附註
變數指派: 如果指定的變數是字元,且不夠大,無法包含結果,則會傳回警告 (SQLSTATE 01004) (且 'W' 會指派給 SQLCA 中的 SQLWARN1 )。 如果提供指示器變數,則會在與變數相關聯的指示器變數中傳回結果的實際長度。
如果指定的變數是以 C NUL 結尾的變數,且不夠大,無法包含結果及 NUL-terminator:
- 如果在 CRTSQLCI 或 CRTSQLCPPI 指令上指定 *CNULRQD 選項 (或在 SET OPTION 陳述式上指定 CNULRQD (*YES)) ,則會發生下列情況:
- 結果被截斷。
- 最後一個字元是 NUL 終止字元。
- 值 'W' 會指派給 SQLCA 中的 SQLWARN1 。
- 如果指定 CRTSQLCI 或 CRTSQLCPPI 指令 (或 SET OPTION 陳述式上的 CNULRQD (*NO)) 上的 *NOCNULRQD 選項,則會發生下列情況:
- 未傳回 NUL-terminator。
- 值 ' N' 指派給 SQLCA 中的 SQLWARN1 。
多個指派: 如果相同 SET 陳述式中包含多個指派,則在執行指派之前,會完全評估所有 表示式s 及 row-fullselects。 因此, 表示式 或 row-fullselect 中目標變數的參照一律是 SET 陳述式中任何指派之前目標變數的值。
範例
範例 1: 將 CURRENT PATH 特別暫存器的值指派給主變數 HV1。
EXEC SQL SET :HV1 = CURRENT PATH;範例 2: 假設 LOB 定位器 LOB1 與 CLOB 值相關聯。 使用 LOB 定位器將 CLOB 值的一部分指派給主變數 DETAILS。
EXEC SQL SET :DETAILS = SUBSTR(:LOB1,1,35);