2010-12-03 11 views
5

J'ai créé le tableau suivanterreur SQL: ORA-12899: valeur trop élevée pour la colonne

CREATE TABLE Customers(
    CustomerID varchar2(9) PRIMARY KEY, 
    Customer_Contact varchar2(40) NOT NULL, 
    Address varchar2(20) NOT NULL, 
    Post_Code varchar2(7) NOT NULL, 
    Telephone_Number varchar2(11) NOT NULL) 

Et je suis en train d'utiliser actuellement INSERT VALUES. J'ai écrit l'instruction suivante

INSERT INTO Customers VALUES(
    501623129, 
    'John Petterson', 
    '-- Singleton Close London', 
    '--- ---', 02082860222) 

Lorsque j'essaie d'exécuter l'instruction, il me donne le message d'erreur suivant.

Error starting at line 4 in command: INSERT INTO Customers VALUES(501623129, 'David Patterson', '30 Singleton Close London', 'SW17 9JY', 02082860642) Error report: SQL Error: ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 20) 12899. 00000 - "value too large for column %s (actual: %s, maximum: %s)"

+13

Je n'aime pas être méchant, mais je dois le dire. Si vous devez demander ce que cette erreur signifie, alors peut-être vous n'êtes pas prêt à être un programmeur professionnel. C'est un message d'erreur extrêmement clair, bien plus clair que près de 95% des messages d'erreur que j'ai rencontrés. – HLGEM

Répondre

18
ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 2 

vous indique ce que l'erreur est. L'adresse peut contenir un maximum de 20 caractères, vous passez 25 caractères.

+1

Merci pour la réponse. Il a aidé – David

+1

En outre, vous passez 8 caractères à Post_Code. –

8

Comme mentionné, le message d'erreur vous montre le problème exact: vous passez 25 caractères dans un champ configuré pour contenir 20. Vous pouvez également envisager de définir les colonnes un peu plus précisément. Vous pouvez définir si la colonne VARCHAR2 va stocker un certain nombre d'octets ou de caractères. Vous pouvez rencontrer un problème dans le futur où vous essayez d'insérer un caractère multi-octet dans le champ, par exemple, 5 caractères de long, mais pas 5 octets: 'ÀÈÌÕÛ'

Voici un exemple :

CREATE TABLE Customers(CustomerID VARCHAR2(9 BYTE), ... 

ou

CREATE TABLE Customers(CustomerID VARCHAR2(9 CHAR), ... 
2

Cette réponse vient toujours en haut dans la liste des ORA-12899 et beaucoup de commentaires non utiles ci-dessus, même si elles sont vieux. Le commentaire le plus utile était # 4 pour tout professionnel essayant de trouver pourquoi ils obtiennent ceci lors du chargement des données.

Certains caractères ont une longueur supérieure à 1 octet, ce qui est particulièrement vrai sur SQL Server. Et ce qui pourrait tenir dans un varchar (20) dans SQLServer ne rentre pas dans un varchar2 (20) similaire dans Oracle.

J'ai rencontré cette erreur hier avec SSIS chargeant une base de données Oracle avec les pilotes Attunity et pensé que je sauverais les gens quelque temps.

-1

exemple: 1 et 2 table est disponible

1 table supprimer l'entrée et sélectionnez ni 2 enregistrements de la table et insérez à aucune table 1. lorsque l'heure de suppression ne 1 table ne pas avoir des enregistrements de la deuxième table par exemple emp id pas disponible signifie que ces erreurs sont apparues