1
votes

ORA-01756: la chaîne entre guillemets n'est pas correctement terminée, dois-je ajouter un devis sur le numéro de téléphone, pourquoi?

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?

1 commentaires

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


3 Réponses :


0
votes

Vous devez échapper à l'apostrophe dans le sous-magasin de Dave.


0 commentaires

3
votes

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 ( () , + , ...)


5 commentaires

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!



1
votes

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.


0 commentaires