Sintaxe de Instruções SQLJ

As instruções SQLJ podem ser mescladas com instruções Java em um arquivo SQLJ.

Instruções SQL Incorporadas em Java

As instruções SQL estáticas em SQLJ aparecem em cláusulas SQLJ. O conversor SQLJ reconhece cláusulas SQLJ porque elas começam com o token #sql e terminam com ponto e vírgula.

As cláusulas SQLJ mais simples são cláusulas executáveis que consistem no token #sql seguido por uma instrução SQL entre chaves. Por exemplo, a cláusula SQLJ a seguir pode aparecer onde uma instrução Java pode aparecer de maneira válida. A finalidade da cláusula SQLJ é excluir todas as linhas na tabela MYTABLE:

   #sql { DELETE FROM MYTABLE };

Variáveis de Host em Java

Os argumentos para instruções SQL incorporadas são transmitidos por meio de variáveis de host, que são variáveis Java que aparecem na instrução SQL. As variáveis de host possuem até três partes:

Um identificador Java pode aparecer várias vezes no código Java gerado para substituir uma cláusula SQLJ.

A consulta a seguir contém a variável de host, :x, que é a variável Java, campo ou parâmetro x visível no escopo que contém a consulta:

   SELECT  COL1,  COL2  FROM  TABLE1  WHERE  COL3  <  :x

Todas as variáveis de host especificadas na SQL composta são variáveis de host de entrada por padrão. Você deve especificar o identificador de modo de parâmetro OUT ou INOUT antes da variável de host para marcá-la como uma variável de host de saída. Por exemplo:

   #sql {begin compound atomic static
        select count(*) into :OUT count1 from employee;
        end compound}

Tokens SQL

Em uma cláusula executável SQLJ, os tokens que aparecem dentro de chaves são tokens SQL, exceto para as variáveis de host, que correspondem a variáveis Java. As variáveis de host devem ser precedidas por dois pontos (:). Os tokens SQL nunca ocorrem fora das chaves de uma cláusula executável SQLJ.

Por exemplo, o método Java a seguir insere os valores de seus argumentos em uma tabela SQL. O corpo do método consiste em uma cláusula executável SQLJ que contém as variáveis de host x, y e z:

   void m (int x, String y, float z) throws SQLException
   {
       #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) };
   }

Não inicialize instruções SQL estáticas em um loop. Deve existir uma instrução para cada instrução SQL estática. Por exemplo, o trecho de código a seguir é inválido:

   for( int i=0; i<2; i++ ){
      #sql [ctx] itr[i] = { SELECT id, name FROM staff };
   }

Substitua o trecho de código acima pelas seguintes instruções:

   int i=0;
   #sql [ctx] itr[i] = { SELECT id, name FROM staff };
   i=1;
   #sql [ctx] itr[i] = { SELECT id, name FROM staff };

Em geral, os tokens SQL não fazem distinção entre maiúsculas e minúsculas (exceto para identificadores delimitados por aspas duplas) e podem ser escritos em maiúsculas, minúsculas ou compostos por letras maiúsculas e minúsculas. No entanto, os tokens Java fazem distinção entre maiúsculas e minúsculas. Para clareza nos exemplos dos tópicos da Ajuda de SQLJ, os tokens SQL sem distinção entre maiúsculas e minúsculas estão em maiúsculas e os tokens Java estão em minúsculas ou compostos por letras maiúsculas e minúsculas. O null em minúsculas é utilizado para representar o valor nulo Java e o NULL em maiúsculas para representar o valor nulo SQL.


Feedback