web-dev-qa-db-fra.com

Caractère d'échappement Oracle pl-sql (pour un "'")

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 à '?

31
Bishan

Pour y échapper, doublez les guillemets:

INSERT INTO TABLE_A VALUES ( 'Alex''s Tea Factory' );
46
Codo

En SQL, vous échappez à une citation par une autre citation:

SELECT 'Alex''s Tea Factory' FROM DUAL
9
Thilo

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".

7
ganapathydselva
SELECT q'[Alex's Tea Factory]' FROM DUAL
3
Siva

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.

1
Bob Jarvis

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.
  • Alex's Tea Factory (qui est la déclaration elle-même)
  • )' 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;
0
Wael Assaf