Les instructions SQLJ peuvent être mélangées à des instructions Java dans un fichier SQLJ.
Les instructions SQL statiques apparaissent dans des clauses SQLJ. Le traducteur SQLJ reconnaît les clauses SQLJ car elles commencent par le symbole #sql et finissent par un point virgule.
Les clauses SQLJ les plus simples sont des clauses exécutables composées du symbole #sql suivi d'une instruction SQL intégrée à des accolades. Par exemple, la clause SQLJ suivante peut apparaître à tous les endroits où une instruction Java peut légalement apparaître. Le but d'une clause SQLJ est de supprimer toutes les lignes de la table MYTABLE :
#sql { DELETE FROM MYTABLE };
Les arguments des instructions SQL intégrées sont véhiculés par des variables hôtes, qui sont des variables Java apparaissant dans l'instruction SQL. Les variables hôtes sont composées au maximum de trois parties :
Un identifiant Java peut apparaître plusieurs fois dans le code Java généré pour remplacer une clause SQLJ.
La requête suivante contient la variable hôte, :x, qui représente la variable Java, la zone ou le paramètre x visible dans l'étendue qui contient la requête :
SELECT COL1, COL2 FROM TABLE1 WHERE COL3 < :x
Toutes les variables hôtes spécifiées dans le SQL complexe sont des variables hôtes d'entrée par défaut. Vous devez spécifier l'identifiant du mode de paramètre OUT ou INOUT avant la variable hôte pour la marquer comme variable hôte de sortie. Par exemple :
#sql {begin compound atomic static select count(*) into :OUT count1 from employee; end compound}
Dans une clause exécutable SQLJ, les symboles qui apparaissent dans les accolades sont des symboles SQL, sauf pour les variables hôtes, qui correspondent à des variables Java. Les variables hôtes doivent être précédées de deux-points (:). Les symboles SQL n'apparaissent jamais en dehors des accolades d'une clause exécutable SQLJ.
Par exemple, la méthode Java suivante insère les valeurs de ses arguments dans une table SQL. Le corps de la méthode se compose d'une clause exécutable SQLJ qui contient les variables hôtes x, y et z :
void m (int x, String y, float z) throws SQLException { #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) }; }
N'initialisez pas d'instructions SQL dans une boucle. Une instruction doit exister pour chaque instruction SQL statique. Par exemple, le bout de code suivant n'est pas valable :
for( int i=0; i<2; i++ ){ #sql [ctx] itr[i] = { SELECT id, name FROM staff }; }
Replacez le bout de code ci-dessus dans les instructions suivantes :
int i=0; #sql [ctx] itr[i] = { SELECT id, name FROM staff }; i=1; #sql [ctx] itr[i] = { SELECT id, name FROM staff };
En général, les symboles SQL sont sensibles à la casse (à l'exception des identifiants délimités par des guillemets doubles), et peuvent être écrits en majuscule, minuscule ou les deux. Cependant, les symboles Java sont sensibles à la casse. Pour plus de clarté dans les exemples des rubriques de l'Aide SQLJ, les symboles SQL sensibles à la casse sont en majuscules et les symboles Java sont en minuscules ou les deux. Le paramètre écrit en minuscules null est utilisé pour représenter la valeur nulle Java et le paramètre écrit en majuscules NULL pour représenter la valeur nulle SQL.