Lorsque j'essaie d'exécuter l'instruction INSERT
dans Oracle, j'ai l'erreur SQL Error: ORA-00917: missing comma
Car il existe une valeur telle que Alex's Tea Factory
Dans mon instruction INSERT
.
Comment pourrais-je échapper à '
?
Pour y échapper, doublez les guillemets:
INSERT INTO TABLE_A VALUES ( 'Alex''s Tea Factory' );
En SQL, vous échappez à une citation par une autre citation:
SELECT 'Alex''s Tea Factory' FROM DUAL
vous pouvez utiliser ESCAPE comme exemple ci-dessous
Le caractère générique '_' est utilisé pour correspondre exactement à un caractère, tandis que '%' est utilisé pour correspondre à zéro ou plusieurs occurrences de caractères. Ces caractères peuvent être échappés en SQL.
SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/';
La même chose fonctionne dans PL/SQL:
if( id like '%/_%' ESCAPE '/' )
Ceci ne s'applique qu'aux motifs similaires, par exemple, dans une insertion, il n'est pas nécessaire d'échapper à _ ou%, ils sont utilisés comme des caractères simples. Dans les chaînes arbitraires, seul "doit être évité par".
SELECT q'[Alex's Tea Factory]' FROM DUAL
Votre question implique que vous construisez l'instruction INSERT en concaténant des chaînes. Je suggère que c'est un mauvais choix car cela vous laisse ouvert aux attaques par injection SQL si les chaînes sont dérivées d'une entrée utilisateur. Un meilleur choix consiste à utiliser des marqueurs de paramètre et à lier les valeurs aux marqueurs. Si vous recherchez Oracle parameter markers
vous trouverez probablement des informations sur votre technologie de mise en œuvre spécifique (par exemple, C # et ADO, Java et JDBC, Ruby et RubyDBI, etc.).
Partager et profiter.
Au lieu de vous inquiéter de chaque apostrophe dans votre déclaration. Vous pouvez facilement utiliser le q' Notation.
Exemple
SELECT q'(Alex's Tea Factory)' FROM DUAL;
Les composants clés dans cette notation sont
q'
qui indique le début de la notation(
un symbole facultatif indiquant le début de l'instruction à échapper complètement.)'
Une parenthèse fermante avec une apostrophe désignant la fin de la notation.Et de telle sorte que vous pouvez définir le nombre d'apostrophes dans la notation sans vous soucier de chacun d'entre eux, ils seront tous traités en toute sécurité.
NOTE IMPORTANTE
Depuis que tu as utilisé (
vous devez le fermer avec )'
, et rappelez-vous qu’il est facultatif d’utiliser tout autre symbole. Par exemple, le code suivant fonctionnera exactement comme le précédent.
SELECT q'[Alex's Tea Factory]' FROM DUAL;