Variables en procedimientos SQL (DECLARE, sentencias SET)

El soporte de variables locales en procedimientos SQL le permite asignar y recuperar valores SQL para dar soporte a la lógica de procedimientos SQL.

Las variables de los procedimientos SQL se definen utilizando la sentencia DECLARE.

Los valores se pueden asignar a variables utilizando la sentencia SET o la sentencia SELECT INTO o como un valor por omisión cuando se declara la variable. Los literales, las expresiones, el resultado de una consulta y los valores de registro especiales se pueden asignar a variables.

Los valores de variable se pueden asignar a parámetros de procedimiento SQL, otras variables en el procedimiento SQL y se puede hacer referencia a ellos como parámetros dentro de sentencias SQL que se ejecutan dentro de la rutina.

El ejemplo siguiente muestra varios métodos para asignar y recuperar valores de variable.

  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

Al declarar una variable, puede especificar un valor predeterminado utilizando la cláusula DEFAULT como en la línea (1). La línea (2) muestra la declaración de una variable del tipo de datos booleano con un valor predeterminado de FALSE. La línea (3) muestra que se puede utilizar una sentencia SET para asignar un único valor de variable. Las variables también se pueden establecer ejecutando una sentencia SELECT o FETCH en combinación con la cláusula INTO tal como se muestra en la línea (4). Las líneas (5) y (6) muestran cómo se puede utilizar la sentencia VALUES INTO para evaluar una función o un registro especial y asignar el valor a una variable o a varias variables.

También puede asignar el resultado de una sentencia GET DIAGNOSTICS a una variable. GET DIAGNOSTICS se puede utilizar para obtener un descriptor de contexto sobre el número de filas afectadas (actualizadas para una sentencia UPDATE, DELETE para una sentencia DELETE) o para obtener el estado de retorno de una sentencia SQL recién ejecutada. La línea (7) muestra cómo se puede asignar a una variable el número de filas modificadas por la sentencia DELETE recién ejecutada anteriormente.

La línea (8) muestra cómo se puede utilizar una parte de la lógica para determinar el valor que se asignará a una variable. En este caso, si las filas se han cambiado como parte de la sentencia DELETE anterior y la ejecución de la sentencia GET DIAGNOSTICS ha dado como resultado que se asigne a la variable v_rcount un valor mayor que cero, a la variable is_done se le asigna el valor TRUE.