Variables en aplicaciones SQLJ

En los programas de aplicación escritos en otros lenguajes, utilice variables para pasar datos entre el programa de aplicación y el servidor de datos. En los programas SQLJ, puede utilizar variables de lenguaje principal o expresiones de lenguaje principal.

Una expresión de host empieza por dos puntos (:). El signo de dos puntos va seguido de un identificador de modalidad de parámetro opcional (IN, OUT o INOUT), que va seguido de una cláusula de expresión entre paréntesis.

Las variables de lenguaje principal y expresiones de lenguaje principal distinguen entre mayúsculas y minúsculas.

Una expresión compleja es un elemento de matriz o una expresión Java que se evalúa como un único valor. Las expresiones complejas contenidas en una cláusula de SQLJ deben estar delimitadas por paréntesis.

Restricciones para nombres de variables: existen dos series de caracteres con significados especiales en los programas SQLJ. Tenga en cuenta las restricciones siguientes cuando utilice esas series de caracteres en sus programas SQLJ:
  • La serie __sJT_ es un prefijo reservado que se utiliza para los nombres de variables generados por SQLJ. No comience los siguientes tipos de nombres con __sJT_:
    • Nombres de expresiones de lenguaje principal
    • Nombres de variables Java que se declaran en bloques que incluyen sentencias SQL ejecutables
    • Nombres de parámetros para métodos que contienen sentencias ejecutables de SQL
    • Nombres de campos en clases que contienen sentencias ejecutables de SQL, o en clases con subclases o clases incluidas que contienen sentencias ejecutables de SQL
  • La serie _SJ es un sufijo reservado que se utiliza para archivos de recursos y clases que han sido creados por SQLJ. Evite utilizar la serie _SJ en nombres de clases y nombres de archivos fuente de entrada.

ejemplos

Ejemplo: Declarar un identificador Java y utilizarlo en una instrucción SELECT:

En este ejemplo, la sentencia que comienza con #sql tiene la misma función que una sentencia SELECT en otros lenguajes de programación. Esta declaración asigna el apellido del empleado con número de empleado 000010 al identificador Java empname.

String empname;
…
#sql [ctxt] 
  {SELECT LASTNAME INTO :empname FROM EMPLOYEE WHERE EMPNO='000010'};

Ejemplo: Declarar un identificador Java y utilizarlo en una llamada a un procedimiento almacenado:

En este ejemplo, la sentencia que comienza con #sql tiene la misma función que una sentencia CALL de SQL en otros lenguajes de programación. Esta declaración utiliza el identificador Java empno como parámetro de entrada para el procedimiento almacenado A. La palabra clave IN, que precede a empno, especifica que empno es un parámetro de entrada. Para un parámetro de una sentencia CALL, el valor por omisión es IN. El calificador explícito o por omisión que indica cómo se utiliza el parámetro (IN, OUT o INOUT) debe coincidir con el valor correspondiente contenido en la definición de parámetro que ha especificado en la sentencia CREATE PROCEDURE para el procedimiento almacenado.

String empno = "0000010";
…
#sql [ctxt] {CALL A (:IN empno)};

Ejemplo: Uso de una expresión compleja como identificador de host:

Este ejemplo utiliza la expresión compleja (((int)yearsEmployed++/5)*500) como expresión de lenguaje principal.

#sql [ctxt] {UPDATE EMPLOYEE
        SET BONUS=:(((int)yearsEmployed++/5)*500) WHERE EMPNO=:empID};
SQLJ ejecuta las acciones siguientes cuando procesa una expresión de lenguaje principal compleja:
  • Evalúa cada una de las expresiones de lenguaje principal, de izquierda a derecha, antes de asignar sus respectivos valores a la base de datos.
  • Evalúa los efectos secundarios, como las operaciones con operadores postfijos, de acuerdo con las reglas normales de Java. Todas las expresiones host se evalúan totalmente antes de pasar cualquiera de sus valores al servidor de datos.
  • Utiliza reglas Java para redondeo y truncamiento.
Por tanto, si el valor de yearsEmployed es 6 antes de ejecutar la sentencia UPDATE, el valor que la sentencia UPDATE asigna a la columna BONUS es ((int)6/5)*500, lo que equivale a 500. Después de asignar 500 a BONUS, el valor de yearsEmployed se incrementa.