web-dev-qa-db-fra.com

Quel est l'équivalent de varchar (max) dans Oracle?

Quel est l'équivalent de varchar (max) dans Oracle?

CLOB?

39
YourMomzThaBomb

Varchars sont limités à 4000 caractères dans Oracle. Sinon, vous devez utiliser un LONG ou un CLOB. Préférez les CLOBs. Les LONGs sont l'équivalent plus ancien.

De cette documentation Oracle :

LOBs vs. LONG et LONG RAW

Les LOB sont différents des anciens LONG et les types de données LONG RAW à bien des égards.

  • La taille maximale d'un LOB est de 4 gigaoctets, contre 2 gigaoctets pour LONG et LONG RAW.
  • Vous pouvez utiliser des méthodes d'accès aléatoires ou séquentielles sur des objets LOB. vous ne peut utiliser que des méthodes d'accès séquentielles sur LONG et LONG RAW.
  • Les objets LOB (sauf les objets NCLOB) peuvent être des attributs d'un type d'objet que vous définir.
  • Les tables peuvent avoir plusieurs colonnes LOB, mais ne peuvent avoir qu'un seul LONG ou LONG RAW colonne.

Migration de LONG et LONG existants. Il est recommandé d’attribuer des attributs bruts aux objets métier par Oracle. Oracle envisage de mettre fin au support de LONG et LONG RAW à l’avenir communiqués. Voir Oracle8 Migration pour plus d'informations sur la migration.

32
cletus

Si je comprends bien, un type de données VARCHAR (MAX) est une manière spécifique à SQL Server 2005 de spécifier un champ de texte pouvant être petit (jusqu'à 8 000 caractères dans SQL Server)oubig à 2 Go dans SQL Server). La base de données gère le changement de stockage en coulisse à mesure que le contenu passe de petit à grand.

Il n'y a pas d'équivalent dans Oracle.

Vous avez soit un petit morceau de texte dans un VARCHAR2 - qui peut aller jusqu'à 32 767 octets dans pl/sql et jusqu'à 4000 octets dans SQL (c'est-à-dire dans une définition de table) - ou vous avez un très gros bit de texte dans un CLOB (qui est un BLOB spécialisé).

10
Nick Pierpoint

En PL/SQL, VARCHAR2 peut contenir jusqu'à 32 767 octets. Pour SQL, la limite est de 4000 octets (qui peut contenir moins de 4000 caractères si vous utilisez un jeu de caractères multi-octets).

3
Gary Myers

La passerelle Oracle 11g traduit un Varchar (Max) en LONG Pas très pratique, ce qui pose des problèmes majeurs lors du chargement des données SQL Server dans Oracle.

Voir l’URL suivante pour plus de détails: - http://docs.Oracle.com/cd/B28359_01/gateways.111/b31049/apa.htm

0
Raymond de Vries

Une approche que j'ai utilisée par le passé (MS SQL, avant Varchar (max)):

Mettez deux colonnes dans la table, un petit Varchar (255, par exemple) et un autre texte. Générez ensuite votre application de façon à ce qu'elle utilise la colonne Varchar pour les petites données, en laissant le texte nul. Si les données sont plus grandes que le Varchar, laissez cette valeur nulle et stockez-la dans le texte. De cette façon, les petites données ne prennent pas leur propre page sur le serveur. Le compromis ici est que toutes les applications utilisant les données doivent accepter ce schéma et avoir une logique pour le prendre en compte. Mais ça marche bien.

Je suppose que la même chose est vraie dans Oracle, juste la sous-construction Varchar2 pour Varchar et CLOB pour le texte. Je ne prétends pas savoir quelle doit être la taille appropriée pour varchar - cela dépend des données et dépend également du reste des colonnes de la table.

0
user175135

Autant que je sache, il n'y a pas d'équivalent. Le plus proche d’Oracle est le CLOB, qui a les mêmes limites que TEXT dans SQL Server à l’époque des «mauvais vieux jours». 

0
Dave Markle