SQL 程序中的變數 (DECLARE、SET 陳述式)

SQL 程序中的區域變數支援可讓您指派及擷取 SQL 值,以支援 SQL 程序邏輯。

SQL 程序中的變數是使用 DECLARE 陳述式來定義。

可以使用 SET 陳述式或 SELECT INTO 陳述式將值指派給變數,或在宣告變數時作為預設值。 文字、表示式、查詢結果及特別暫存器值可以指派給變數。

變數值可以指派給 SQL 程序參數、SQL 程序中的其他變數,並且可以參照為在常式內執行的 SQL 陳述式內的參數。

下列範例示範指派及擷取變數值的各種方法。

  CREATE PROCEDURE proc_vars()
  SPECIFIC proc_vars
  LANGUAGE SQL
  BEGIN
     
    DECLARE v_rcount INTEGER;

    DECLARE v_max DECIMAL (9,2);

    DECLARE v_adate, v_another  DATE;    		 

    DECLARE v_total INTEGER DEFAULT 0;           -- (1)

    DECLARE v_rowsChanged BOOLEAN DEFAULT FALSE; -- (2)

    SET v_total = v_total + 1;                   -- (3)
	
    SELECT MAX(salary)                           -- (4)
      INTO v_max FROM employee;  	    		 

    VALUES CURRENT_DATE INTO v_date;             -- (5)

    SELECT CURRENT DATE, CURRENT DATE            -- (6)
         INTO v_adate, v_another
    FROM SYSIBM.SYSDUMMY1;

    DELETE FROM T; 
    GET DIAGNOSTICS v_rcount = ROW_COUNT;        -- (7)

    IF v_rcount > 0 THEN                         -- (8)
      SET is_done = TRUE;
    END IF;
  END

當宣告變數時,您可以使用第 (1) 行的 DEFAULT 子句來指定預設值。 第 (2) 行顯示布林資料類型的變數宣告,預設值為 FALSE。 第 (3) 行顯示 SET 陳述式可用來指定單一變數值。 您也可以執行 SELECT 或 FETCH 陳述式,並結合 INTO 子句來設定變數,如第 (4) 行所示。 第 (5) 和 (6) 行顯示如何使用 VALUES INTO 陳述式來評估函數或特別暫存器,並將值指派給變數或多個變數。

您也可以將 GET DIAGNOSTICS 陳述式的結果指派給變數。 GET DIAGNOSTICS 可用來取得受影響列數的控點 (針對 UPDATE 陳述式更新,針對 DELETE 陳述式更新) ,或取得剛執行之 SQL 陳述式的傳回狀態。 第 (7) 行顯示如何將剛執行的 DELETE 陳述式所修改的列數指派給變數。

第 (8) 行示範如何使用邏輯片段來決定要指派給變數的值。 在此情況下,如果在先前 DELETE 陳述式中變更列,且 GET DIAGNOSTICS 陳述式執行導致變數 v_rcount 獲指派大於零的值,則變數 is_done 會獲指派值 TRUE。