EXECUTE IMMEDIATE — prépare et exécute un ordre dynamique
EXECUTE IMMEDIATE chaine
EXECUTE IMMEDIATE
prépare et exécute
immédiatement un ordre SQL spécifié dynamiquement, sans
récupérer les enregistrements du résultat.
chaine
#Une chaîne littérale ou une variable hôte contenant l'ordre SQL à exécuter.
Dans une utilisation typique, la chaîne
est une variable hôte référençant une chaîne contenant un ordre SQL
dynamiquement construit. Le cas d'une chaîne littérale n'est pas très utile ;
vous pouvez aussi bien écrire l'ordre SQL directement, sans saisir
en plus EXECUTE IMMEDIATE
.
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.
Voici un exemple qui exécute un ordre INSERT
en utilisant EXECUTE IMMEDIATE
et une variable
hôte appelée commande
:
sprintf(commande, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')"); EXEC SQL EXECUTE IMMEDIATE :commande;
EXECUTE IMMEDIATE
est spécifié dans le standard SQL.