En PL/SQL, les guillemets simples dans les chaînes doivent être échappés pour que le moteur PL/SQL sache que vous souhaitez indiquer la présence d'un guillemet simple pour ne pas terminer la chaîne. Si vous souhaitez utiliser une variable sql_stmt
, vous devez également affecter la valeur à cette variable dans une étape distincte de l'appel EXECUTE IMMEDIATE
.
Cela fonctionne (notez que ces deux guillemets simples consécutifs, pas un caractère double guillemet simple) pour être une raison d'utiliser SQL dynamique ici cependant,
DECLARE
sql_stmt VARCHAR2(200);
BEGIN
sql_stmt := 'update dos_visits set visit_type = ''IMV'' where visit_type = ''SMV''';
EXECUTE IMMEDIATE sql_stmt;
END;
Il ne semble pas,. Il serait généralement plus judicieux d'utiliser SQL statique
BEGIN
update dos_visits
set visit_type = 'IMV'
where visit_type = 'SMV';
END;
Si vous allez utiliser SQL dynamique pour une raison quelconque, vous voudrez probablement utiliser des variables de grippage dans votre requête, sauf si ces visit_type
valeurs sont vraiment codées en dur .
DECLARE
sql_stmt VARCHAR2(200);
BEGIN
sql_stmt := 'update dos_visits set visit_type = :1 where visit_type = :2';
EXECUTE IMMEDIATE sql_stmt
USING 'IMV', 'SMV';
END;
changement « SMV » à « SMV » et vous devriez être à travers – Satya
@Satya, thats un peu floue et ne marche pas poignée 'IMV', quoique sa bonne réponse. Juste poster comme une réponse. – paqogomez