Si j'utilise de nombreuses variables CLOB dans la procédure stockée PL/SQL pour stocker de nombreuses chaînes de grande longueur, y a-t-il des problèmes de performances? La longueur du CLOB est-elle également variable? Y a-t-il des limitations/désavantages connus pour CLOB au lieu d'utiliser varchar2 et long?Oracle PL/SQL: Performances du type de données CLOB dans PL/SQL
Répondre
Les CLOB ont une longueur variable, oui. La limite supérieure varie en fonction de la version d'Oracle utilisée et de la taille de votre bloc de base de données. Pour 11G, la limite est "valeur 4G * du paramètre DB_BLOCK_SIZE" (à partir de 11G PL/SQL Language Reference). Les valeurs VARCHAR2 sont limitées à 32767 octets en PL/SQL.
Je n'ai pas d'informations définitives sur la perforance relative de CLOB vs VARCHAR2 en PL/SQL, et un bref Google n'a pas non plus été utile. Cependant, je soupçonne fortement que VARCHAR2 fonctionne mieux que CLOB en général (pour les données qui peuvent être stockées dans l'un ou l'autre), car il est plus simple. Vous pouvez facilement mettre en place un test pour prouver ce bon ou faux en écrivant le même programme simple une fois avec VARCHAR2 et une fois avec CLOB, et en exécutant chaque 1000s fois et en comparant le temps écoulé total. L'utilitaire Runstats de Tom Kyte est d'une grande aide ici, et montre d'autres différences entre 2 approches en termes de ressources Oracle.
Mon conseil serait: si vos données dépassent 32K alors vous devez utiliser CLOB; sinon ne pas utiliser CLOB, utilisez VARCHAR2.
NB: si CLOB étaient mieux que VARCHAR2 pour toutes tailles de données de caractère, Oracle serait probablement deprecate VARCHAR2, comme ils l'ont fait avec le LONG datatype - mais ils ont pas.
Les CLOB sont sensiblement plus chers (plus lents) et plus difficiles à utiliser que VARCHAR2. Si vous utilisez inutilement CLOB au lieu de VARCHAR2, vous subissez une pénalité de performance mesurable. En fin de compte, comme indiqué précédemment, utilisez le bon type de données pour le bon travail.
1) si vous enregistrez 4000 octets ou moins dans la base de données, utilisez VARCHAR2 sinon utilisez CLOB. 2) si vous stockez 32 Ko ou moins dans PLSQL, utilisez VARCHAR2 sinon utilisez CLOB.
Tout dépend de ce dont vous avez besoin. Si vos données peuvent dépasser une limite VARCHAR2, utilisez CLOB sinon utilisez VARCHAR2. En ce qui concerne les négatifs clairs, considérons que lorsque vous travaillez avec des types de données LOB de toute nature, un LOB peut être TEMPORAIRE (jamais stocké dans une ligne réelle dans une table) ou PERMANENT (stocké dans une ligne réelle dans une table). Si vous construisez dynamiquement une CLOB dans PLSQL et passez cette CLOB à JAVA ou à un autre client externe, vous avez créé un CLOB temporaire et l'avez poussé hors du contrôle de la base de données Oracle. Cela signifie que votre code qui accepte le CLOB temporaire est maintenant responsable de la libération du CLOB quand il est fait avec. Votre code doit avoir une méthode native à son environnement que vous pouvez utiliser à cette fin. Si vous ne parvenez pas à le faire, votre espace de stockage temporaire se remplira éventuellement et votre base de données sera bloquée (arrêt du travail). Ça ne va pas tomber en panne, ça ne marche pas. Un redémarrage sera probablement nécessaire. Le problème est que de nombreux outils de développement (de nombreuses versions de Java par exemple) n'ont pas l'appel de bibliothèque nécessaire.
Bonne chance.
Les variables CLOB sont essentiellement des pointeurs, donc elles ne sont pas intrinsèquement lentes. Le problème est d'accéder au contenu du CLOB.Dans mon expérience:
- En se fondant sur CLOB < implicite d'Oracle -> conversions VARCHAR2 a tendance à être lent.
- L'utilisation du package
dbms_lob
est raisonnablement performante. Il suffit de faire cela dans une boucle:- Obtenir un morceau de données de votre CLOB dans un tampon
- Utilisez les données de votre tampon. Peut-être le transformer en un autre morceau de données.
- Écrire de manière sensible le bloc transformé de données dans un CLOB de destination.
- 1. plsql enfant parent oracle
- 2. Imprimer équivalent sur Oracle PLSQL
- 3. plsql curseur itératif problème
- 4. Fonctions de PLSQL help
- 5. PLSQL retour valeurs
- 6. C# et PLSQL curseur
- 7. Oracle 10gR2 CLOB Type de données
- 8. plsql format numérique personnalisé
- 9. Oracle PLSQL définissant un curseur à partir d'une variable
- 10. ORDER BY question sur PLSQL
- 11. Oracle PLSQL - Déclare un curseur sur une table inexistante
- 12. PLSQL WHERE date_time est dans une plage de dates
- 13. Vérifiez si une variable est null dans plsql
- 14. Comment découper la date dans PLSQL?
- 15. instruction de sélection PLSQL avec aide variable
- 16. Comment faire une sauvegarde d'une base de données PLSQL?
- 17. PLSQL Fonction utilisée dans where clause - Performance Issue
- 18. Obtenez deux enregistrements à partir du curseur PLSQL
- 19. Comment appeler un script shell à partir du programme PLSQL
- 20. Collections PLSQL - pour créer une collection d'enregistrements ou non?
- 21. Lance des messages d'erreur spécifiques dans PLSQL Oracle ... attrape en hibernation?
- 22. Oracle clob à String dans JSP
- 23. Mise à jour de la forme tabulaire Apex avec PLSQL
- 24. Convertir PLSQL curseur de la syntaxe à boucle TSQL
- 25. VB6 Oracle Récupération Clob dans un tableau
- 26. PLSQL - Suppression de tous les objets de base de données d'un utilisateur
- 27. en PLSQL, j'ai vu quelqu'un utiliser pour boucle sans définir l'indice de boucle, pourquoi? Comment?
- 28. ne peut pas obtenir clob type de données de base de données dans l'entité JPA
- 29. procédure stockée de printemps et de plsql - gestion des exceptions et transactions
- 30. Oracle clob sur dblink avec différents charset