2010-11-14 6 views
38

Je souhaite insérer le caractère spécial & dans mon instruction d'insertion. Mon insert est:Comment entrer des caractères spéciaux comme "&" dans la base de données Oracle?

INSERT INTO STUDENT(name, class_id) VALUES ('Samantha', 'Java_22 & Oracle_14'); 

Si je tente d'exécuter cette requête, je reçois un popup et il me demande d'entrer la valeur pour Oracle_14.

Comment entrer des caractères spéciaux comme & dans l'instruction d'insertion pour oracle db?

+0

Quel outil utilisez-vous pour effectuer l'insertion? – SimonJ

+0

J'utilise SQLDeveloper. – Rachel

Répondre

49

Si vous êtes dans SQL * Plus ou SQL Developer, vous voulez exécuter

SQL> set define off; 

avant d'exécuter l'instruction SQL. Cela tourne de la vérification des variables de substitution.

Les directives SET comme ceci sont des instructions pour l'outil client (SQL * Plus ou SQL Developer). Ils ont une portée de session, donc vous devez émettre la directive chaque fois que vous vous connectez (vous pouvez placer la directive dans le fichier glogin.sql de votre machine client si vous voulez changer la valeur par défaut pour que DEFINE soit réglé sur OFF). Il n'y a aucun risque que vous impacteriez un autre utilisateur ou session dans la base de données.

+9

17 secondes ... J'étais * si * proche –

+0

alors est-ce que cela va désactiver la définition pour mon SQL ou pour la table complète ou la base de données complète puis-je avoir quelque chose comme ça dans le script d'insertion de production? – Rachel

+0

IMO, votre code de production doit être * en utilisant * substitution, ou au minimum, la manipulation elle-même. Je crois que le code fait le réglage pour votre session de connexion, cependant. –

17

Essayez 'Java_22 '||'&'||' Oracle_14'

+0

Cette solution fonctionne bien. – Rachel

-3

Vous pouvez utiliser le caractère anti-slash pour échapper à un seul caractère ou symbole

'Java_22 \ & Oracle_14'

ou accolades pour échapper à une chaîne de caractères ou symboles

'{Jav a_22 & Oracle_14} »

+0

votre première approche ne fonctionne pas. – Rachel

+0

Il imprime le support aussi pour la deuxième approche et '\ &' pour la première approche. – Rachel

+2

Un utilisateur anonyme dit: * Remarque: ceci est initialement demandé dans la documentation Oracle mais ne fonctionne pas dans un client comme SQL Developer. * – Pubby

9

La réponse de Justin est le chemin à parcourir, mais aussi comme un FYI vous pouvez utiliser la fonction chr() avec la valeur ascii du caractère que vous souhaitez insérer. Pour cet exemple, il serait:

INSERT INTO STUDENT(name, class_id) VALUES ('Samantha', 'Java_22 '||chr(38)||' Oracle_14'); 
0

Nous pouvons utiliser une autre façon aussi par exemple pour insérer la valeur avec de Java_22 & Oracle_14 'caractères spéciaux dans db nous pouvons utiliser le format suivant ..

'Java_22' || ' & '||' Oracle_14 '

Bien que cela soit considéré comme 3 jetons différents, nous n'avons aucune option car la gestion de la séquence d'échappement fournie dans la documentation Oracle est incorrecte.

+1

C'est ce que dit EternalNoob, et proche de ce que Craig a dit, quand la question a été posée. –

0

Si un caractère d'échappement doit être ajouté au début ou à la fin comme "JAVA", utilisez:

INSERT INTO STUDENT(name, class_id) VALUES ('Samantha', ''||chr(34)||'JAVA'||chr(34)||''); 
1

Pour insérer des valeurs qui a obtenu « & » en elle. Utilisez le code suivant.

Set define off; 

Begin 

INSERT INTO STUDENT(name, class_id) VALUES ('Samantha', 'Java_22 & Oracle_14'); 

End ; 

Et appuyez sur F5 à partir des éditeurs Oracle ou Toad.

0

Pour le jeu de caractères spéciaux, vous devez vérifier les cartes UNICODE. Après avoir choisi votre personnage, vous pouvez utiliser l'instruction SQL ci-dessous,

SELECT COMPOSE('do' || UNISTR('\0304' || 'TTTT')) FROM dual; 

-

d ò TTTT

0

Vous pouvez également utiliser concat comme ceci: D

Insert into Table Value(CONCAT('JAVA ',CONCAT('& ', 'Oracle')); 
-1

Dans mon cas, je dois insérer une ligne avec le texte "Veuillez composer * 001 pour de l'aide". Dans ce cas, le caractère spécial est un astérisque.

En utilisant insertion directe à l'aide SQLplus il a échoué avec l'erreur « SP2-0734: commande inconnue en commençant ... »

I tryed évasion mis sans succès.

Pour, je créé un insert.sql de fichiers sur le système de fichiers avec

insert into testtable (testtext) value ('Please dial *001 for help'); 

Puis, à partir SQLplus J'exécutais

@insert.sql 

et ligne a été insérée.

0

Il y a 3 façons de le faire:

1) Il suffit de faire SET DEFINE OFF; puis exécutez le stmt d'insertion.

2) Simplement en concaténant le mot réservé entre guillemets simples et en le concaténant. E.g. Sélectionnez 'Java_22' || '&' || ':' || 'Oracle_14' à partir de dual - (:) est un optionnel.

3) En utilisant la fonction CHR avec concaténation. E.g. Sélectionnez 'Java_22' || chr (38) || ' Oracle_14 'à partir du double

Espérons que cette aide !!!

0

strAdd = strAdd.replace ("&", "'||' & '||'");

1

vous pouvez simplement échapper & en suivant un point. essayez ceci:

INSERT INTO STUDENT(name, class_id) VALUES ('Samantha', 'Java_22 &. Oracle_14'); 
Questions connexes