PREPARE — prépare un ordre pour son exécution
PREPAREnom_préparé
FROMchaîne
PREPARE
prépare l'exécution d'un ordre
spécifié dynamiquement sous forme d'une chaîne. C'est différent
des ordres SQL directs PREPARE, qui peuvent
aussi être utilisés dans des programmes embarqués. La commande
EXECUTE peut être utilisée pour exécuter
les deux types de requêtes préparées.
nom_prepare
Un identifiant pour la requête préparée.
chaîne
Une chaîne littérale ou une variable hôte contenant un ordre
SQL préparable, soit SELECT, INSERT, UPDATE ou DELETE.
Utilisez des points d'interrogation (?
)
pour les valeurs de paramètres à fournir à l'exécution.
Dans une utilisation type, la chaîne
est
une référence de variable à une chaîne contenant l'ordre SQL dynamiquement
construit. Le cas d'une chaîne littérale n'est pas très utile ;
vous pouvez tout autant écrire un ordre SQL direct PREPARE
.
Si vous utilisez une chaîne littérale, gardez à l'esprit que tout
guillemet que vous souhaitez inclure dans l'ordre SQL doit être écrit
avec des caractères d'échappement octal (\042
) et non pas
les idiomes habituels C \"
. En effet, la chaîne est dans
une section EXEC SQL
, donc l'analyseur grammatical ECPG
l'analyse suivant les règles SQL et non pas les règles C. Toute
barre oblique inverse (« backslash ») sera plus tard
gérée en suivant les règles C ; mais \"
provoque
une erreur de syntaxe immédiate parce qu'il est vu comme une fin de
litéral.
char *stmt = "SELECT * FROM test1 WHERE a = ? AND b = ?"; EXEC SQL ALLOCATE DESCRIPTOR outdesc; EXEC SQL PREPARE foo FROM :stmt; EXEC SQL EXECUTE foo USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR outdesc;
PREPARE
est spécifié dans le standard SQL.