Pourquoi suis-je ORA-01401: insertion d'une valeur trop grande pour la colonne - quand je ne suis pas de l'insertion?
Voici quelques SQL à mettre en place avec une table très très simple.
CREATE TABLE CC_TEST2
("CURRENCYID" NUMBER NOT NULL ENABLE,
"NAME" NVARCHAR2(255)) ;
insert into CC_TEST2 (select 1,'Testing issue'from dual);
commit;
Puis cette recrée la question
SELECT (step.Name ||
'Commentary of 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 12')
as thing FROM CC_TEST2 step
Des idées?
Je pense que c'est quelque chose d'étrange à propos de nVarchar2? Si je change le type de colonne à varChar2 alors c'est OK. Malheureusement je ne peux pas changer le type de la colonne de la production actuelle de la base de données où je veux en venir à la question
peut-être s'engager après l'insérer?
Bien évidemment vous insérez - faites-vous la même chose de
C'est tout simplement la mise en place des données de test - l'instruction Select est où l'erreur se produit
C'est facile à reproduire.
Pourriez-vous s'il vous plaît poster le résultat de
Bien évidemment vous insérez - faites-vous la même chose de
INSERT INTO CC_TEST2 (1,'Testing Issue');
?C'est tout simplement la mise en place des données de test - l'instruction Select est où l'erreur se produit
C'est facile à reproduire.
Pourriez-vous s'il vous plaît poster le résultat de
select * from nls_database_parameters where parameter like '%CHARACTERSET';
?OriginalL'auteur Jon Spokes | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
Si "NOM" NVARCHAR2(255) est changé à "NOM" VARCHAR2(255) (j'.e en utilisant varchar2) vous n'aurez pas de problème. Vous pouvez tester la même chose à
http://sqlfiddle.com/#!4/cefd8/2
bon alors essayez "to_char(nom)||", vérifiez que le sqlfiddle.com/#!4/10933/12
Merci, il semble que ce soit une solution.
J'espère qu'il n'y a pas de caractères spéciaux dans vos NVARCAR2 colonnes qui ne passent pas un TO_CHAR.
OriginalL'auteur user2342436
Il semble y avoir une certaine étrangeté avec NVARCHAR2 et de concaténation de chaîne.
Voir http://sqlfiddle.com/#!4/936c4/2
Ma compréhension basée sur l'exécution des différents états dans le SQL Violon est que la constante de chaîne sur le côté droit de l'opérateur de concaténation || est également traitée comme un NVARCHAR2, et peut être à plus de 1000 caractères.
Pouvez vous s'il vous plaît fournir le lien en disant que la limite maximale de NVARCHAR2? La taille maximale de NVARCHAR2 ou VARCHAR2 est de 4000 octets. Mais, NVARCHAR2 utilise toujours deux byte character set (al16utf16, respectivement ou UTF8). Maximum de caractères qui peuvent être stockées dans NVARCHAR2 type de données est de 2000.
Oui, mais lors de l'utilisation d'une trop longue constante de chaîne concaténée à un NVARCHAR2 colonne, vous obtenez l'erreur ORA-01401, alors que vous attendez ORA-01489 ou un autre message d'erreur.
OriginalL'auteur Colin 't Hart
Conformément à la documentation d'oracle
NCHAR et NVARCHAR2 Types de données
NCHAR
etNVARCHAR2
sont en Unicode types de données qui stockent des données de caractères Unicode. Ils sont également appelés comme des types de données Natifs.La
NVARCHAR2
type de données stocke des chaînes de caractères de longueur variable.Lorsque vous créez une table avec une
NVARCHAR2
colonne, la taille maximale spécifiée est toujours dans la longueur de caractère sémantique. Longueur de caractère sémantique est la valeur par défaut et uniquement de la longueur de la sémantique pourNVARCHAR2
.Par exemple, si le jeu de caractères nationaux est
UTF8
, alors l'instruction suivante définit le maximum de la longueur en octets de 90 octets:La longueur maximale d'un
NVARCHAR2
colonne est de 4000 octets. Il peut contenir jusqu'à 4 000 caractères. Les données réelles sont soumis à l'maximale en octets de la limite de 4000. Les deux contraintes de taille doivent être satisfaits simultanément au moment de l'exécution.Tout dépend de votre jeu de caractères et la longueur de la sémantique.
la Raison de votre problème est
Cela est bon pour le type de données Natif aussi.
Solution:
Utilisation
CHAR
au lieu deBYTES
que la longueur de la sémantique pour VARCHAR2 ou CHAR.OriginalL'auteur SriniV