SQL 过程中的变量(DECLARE 和 SET 语句)

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 语句。 还可按行 (4) 中所示,通过将 SELECT 或 FETCH 语句与 INTO 子句配合执行来设置变量。 行 (5) 和行 (6) 显示如何使用 VALUES INTO 语句来对函数或专用寄存器求值以及如何将该值指定给一个变量或多个变量。

还可将 GET DIAGNOSTICS 语句的结果指定给变量。 可使用 GET DIAGNOSTICS 控制受影响行数(UDPDATE 对应 UPDATE 语句,DELETE 对应 DELETE 语句)或获取刚刚执行的 SQL 语句的返回状态。 行 (7) 显示如何将刚才执行的 DELETE 语句修改的行数指定给变量。

行 (8) 演示如何使用逻辑块来确定要指定给变量的值。 在此情况下,如果在先前执行 DELETE 语句和 GET DIAGNOSTICS 语句(导致对变量 v_rcount 指定大于零的值)时行数发生了更改,那么会对变量 is_done is 指定值 TRUE。