ORA-12899 valeur trop grande pour la colonne en dépit de même longueur
Je suis en cours d'exécution de la requête suivante. Mais pour obtenir des ORA-12899. Bien que la longueur de la chaîne essaie d'insérer est de 30.
INSERT INTO TABLE1 SELECT * FROM temp_Table1 where LENGTH(column1)=30;
SQL Error: ORA-12899:value too large for column "TABLE1"."column1" (actual: 31, maximum: 30)
select column1 from temp_Table1 where LENGTH(column1)=30;
Testing - HLC/TC Design Corre
Desc temp_Table1
column1 VARCHAR2(30)
Desc Table1
column1 VARCHAR2(30)
colonne1 peut contenir un maximum de 30 caractères, vous êtes de passage à 31 caractères.
Peut-être cette rubrique vous aider ORA-12899: valeur trop grande pour la colonne
Peut-être cette rubrique vous aider ORA-12899: valeur trop grande pour la colonne
OriginalL'auteur Shitu | 2016-09-09
Vous devez vous connecter pour publier un commentaire.
Vous voyez la différence entre du caractère et de la longueur en octets de la sémantique:
Si votre session est d'octets à l'aide de la sémantique puis la colonne de votre table par défaut:
Qui est le même que explicitement:
Si votre source de données est de cinq caractères, mais inclut les caractères multi-octets, alors le nombre de octets va dépasser cinq:
Qui est ce que vous voyez. Lorsque vous insérez les valeurs de votre table, vous êtes filtre sur la longueur de la valeurs, mais
length()
compte des caractères plutôt que des octets. Il y a unlengthb()
fonction qui effectue le nombre d'octets. Si vous cochez la longueur en octets de l'30 caractères de la valeur que vous sélectionnez, vous verrez qu'elle est en fait 31 octets, de sorte que l'un de ces caractères multi-octets.De la
dump()
valeurs vous pouvez voir qu'aprèsTesting
(54,65,73,74,69,6e,67
) et avant l'espace et le tiret (20,2d
) vous avezc2,a0
, qui est l'UTF-8 multi-octets espace insécable. (Vous voyez souvent que, avec des guillemets et d'autres non-ASCII-plage de caractères, dans le texte qui a été copié à partir d',. dire, un document Word).Vous pouvez changer votre insert de filtre sur
LENGTHB(column1)=30
(qui exclut la ligne que vous trouver actuellement), ou de changer votre définition de la colonne à 30 caractères au lieu de 30 octets:Ou de remplacer tout inattendus de caractères multioctets avec un seul octet équivalents, si c'est possible et pertinent pour vos données; dans ce cas, un espace normal pourrait de travail, mais avec toute la substitution de vous détruire de l'information qui peut être importante.
OriginalL'auteur Alex Poole
Essayez de changer votre table comme
Le message d'erreur indique que votre colonne1 peut stocker maximum de 30 caractères, et vous êtes de passage à plus de 30 caractères, qui résultats dans l'erreur.
Vous pouvez également consulter cet article: La Base de données Oracle - Octets ou de Caractères pour VARCHAR2 et CHAR
OriginalL'auteur Rahul Tripathi
La réponse ci-dessus URL d'origine
OriginalL'auteur Gehan Fernando
En raison de différents paramètres NLS dans la table cible de la base de données qu'il pourrait exiger plus d'octets dans la cible.
Essayez de changer la table comme
modifier Table1 modifier colonne1 varchar2(30 caractères)
OriginalL'auteur lakshmi tatavarty