As instruções SQLJ podem ser mescladas com instruções Java em um arquivo SQLJ.
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 };
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}
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.