SQL> create table customer( 2 customer_ID number(3) primary key, 3 customer_Name varchar2(26), 4 contact_Name varchar2(26), 5 phone number(10)); Table created. SQL> desc customer Name Null? Type ----------------------------------------- -------- ---------------------------- CUSTOMER_ID NOT NULL NUMBER(3) CUSTOMER_NAME VARCHAR2(26) CONTACT_NAME VARCHAR2(26) PHONE NUMBER(10) SQL> insert into customer (customer_ID, customer_Name, contact_Name, phone) values (23, 'Dave's Sub Shop', 'David Logan', 555-333-4545); ERROR: ORA-01756: quoted string not properly terminated Can anyone explain this error for me?
3 Réponses :
Vous devez échapper à l'apostrophe dans le sous-magasin de Dave.
Il y a deux problèmes ici:
vous insérez une chaîne contenant un guillemet simple intégré: «Dave's Sub Shop»
. Le problème apparaît dans n'importe quel éditeur de texte décent (y compris les SO). Vous devez échapper à la citation: 'Dave''s Sub Shop'
la colonne phone_number
est déclarée comme number (10)
, mais ce que vous essayez d'insérer ne ressemble pas à un: 555-333 -4545
. Vous devez changer le datatpe de la colonne en varchar (12)
. Ensuite, vous devrez citer les valeurs que vous insérez.
Démo sur DB Fiddle strong >:
create table customer( customer_ID number(3) primary key, customer_Name varchar2(26), contact_Name varchar2(26), phone varchar(12)); insert into customer (customer_ID, customer_Name, contact_Name, phone) values (23, 'Dave''s Sub Shop', 'David Logan', '555-333-4545'); 1 rows affected select * from customer; CUSTOMER_ID | CUSTOMER_NAME | CONTACT_NAME | PHONE ----------: | :-------------- | :----------- | :----------- 23 | Dave's Sub Shop | David Logan | 555-333-4545
NB: une autre solution serait de convertir le numéro de téléphone en un type de données numérique avant de l'insérer (en supprimant le -
intégré par exemple ), mais je ne le recommanderais pas, car les numéros de téléphone ne sont en fait pas des nombres: ils peuvent avoir des zéros non significatifs et peuvent contenir des caractères non numériques ( ()
, + , ...)
merci, cela fonctionne, mais le numéro '555-333-4545' n'a pas besoin du devis, ajouter un devis sera une autre erreur. quel id je veux faire que le numéro de téléphone devienne (555) 333-4545, j'essaye ceci là montrer est une erreur aussi.
@YongmingLiu - "citer la valeur" signifie la mettre entre guillemets; guillemets simples dans ce cas. 555-333-4545
n'est pas un nombre; vous devez traiter cela, ou (555)333-4545
, comme des chaînes - en les mettant entre guillemets simples et en vous assurant que la colonne que vous stockez est varchar2
et suffisamment grand pour contenir la valeur la plus longue que vous voudrez peut-être stocker. Votre nouvelle valeur est désormais de 13 caractères, vous aurez donc besoin d'au moins varchar2 (13)
.
Je l'ai, vraiment apprécié.
J'ajouterais simplement mes remerciements au commentaire de @GMB sur le fait de NE PAS stocker les numéros de téléphone sous NUMBER. J'étais déjà en train de préparer mon commentaire à ce sujet avant de lire le sien. Nos vies (et nos données) sont pleines de «chiffres» qui ne sont pas des numéros - téléphone, sécurité sociale, identification du véhicule. Ma règle de base est, "si faire de l'arithmétique est illogique, alors ce n'est pas un nombre, alors déclarez-le comme un varchar2 et traitez-le comme tel."
Merci pour le commentaire @EdStevens!
Vous voulez:
insert into customer (customer_ID, customer_Name, contact_Name, phone) values (23, 'Dave''s Sub Shop', 'David Logan', '555-333-4545');
Votre erreur est due à "Dave's Sub Shop". Le premier guillemet est pris comme la fin de la chaîne, donc l'erreur se produit au niveau des s
.
Le 555-333-4545
ne le fera pas génèrent nécessairement une erreur. Mais cela produira le nombre -4323, ce qui n'est pas ce que vous souhaitez.
C'est ceci: «Dave's Sub Shop», vous avez un devis dans votre chaîne de caractères, ce qui lui fait penser que Dave est ce que vous essayez d'insérer pour customer_Name