Maison > base de données > tutoriel mysql > Comment puis-je diviser efficacement des chaînes en plusieurs lignes dans Oracle ?

Comment puis-je diviser efficacement des chaînes en plusieurs lignes dans Oracle ?

Susan Sarandon
Libérer: 2025-01-22 17:42:10
original
104 Les gens l'ont consulté

How Can I Efficiently Split Strings into Multiple Rows in Oracle?

Gérer efficacement les divisions de chaînes en plusieurs lignes dans les bases de données Oracle

Les opérations de base de données nécessitent souvent de diviser les chaînes en lignes individuelles. Oracle propose des méthodes efficaces, notamment dans les versions 10g et supérieures, pour gérer cette tâche.

Une méthode de base utilisant des expressions régulières

Une technique simple mais puissante utilise des expressions régulières et la clause connect by. Cela implique de construire une table temporaire et d'utiliser des fonctions d'expression régulière pour extraire des sous-chaînes :

<code class="language-sql">with temp as (
    select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual
    union all
    select 109, 'test2', 'Err1' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by level <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels;</code>
Copier après la connexion

Comprendre le code

  1. Le temp CTE (Common Table Expression) simule des exemples de données.
  2. length(regexp_replace(t.error, '[^,] ')) 1 détermine le nombre d'erreurs en comptant les valeurs séparées par des virgules.
  3. select level from dual connect by level <= ... génère une séquence de nombres de 1 au nombre d'erreurs.
  4. table(cast(multiset(...) as sys.OdciNumberList)) transforme la séquence de nombres en une collection utilisable.
  5. La jointure croisée se combine temp avec la collection de numéros, créant toutes les combinaisons nécessaires.
  6. trim(regexp_substr(t.error, '[^,] ', 1, levels.column_value)) extrait chaque erreur en utilisant le numéro généré comme indicateur de position.

Cette méthode divise efficacement les chaînes comportant plusieurs valeurs en lignes distinctes tout en préservant l'intégrité des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal