6
votes

Analyse de la chaîne délimitée dans les colonnes?

J'ai une colonne avec des valeurs séparées par tuyaux tels que:

'23 | 12,1 | 450 | 30 | 9 | 78 | 82.5 | 92.1 | 120 | 185 | 52 | 11 '

Je veux analyser cette colonne pour remplir une table avec 12 colonnes correspondantes: mois1, mois2, mois 3 ... mois12.

alors mois1 aura la valeur 23, mois2 la valeur 12.1 etc ...

Y a-t-il un moyen de l'analyser par une boucle ou un délimètre au lieu d'avoir à séparer une valeur à la fois en utilisant le substruisement?

Merci.


3 Réponses :


0
votes

Je ne pense pas qu'il y ait déjà quelque chose déjà défini.

Il y a peu de mises en œuvre chez ORAFAQ et j'ai trouvé Ceci aussi.


0 commentaires

9
votes

Vous pouvez utiliser regexp_substr code> (10g +): xxx pré>

avec une boucle dans PL / SQL: P>

INSERT INTO your_table
   (ID, month1, month2, month3...)
   SELECT :p_id, 
          regexp_substr(:p_tsv, '[^|]+', 1, 1) c1, 
          regexp_substr(:p_tsv, '[^|]+', 1, 2) c2,
          regexp_substr(:p_tsv, '[^|]+', 1, 3) c3
          ...
     FROM dual;


2 commentaires

Merci Vincent, votre message est utile, mais cela ne traite pas de tout problème. Il n'apparaît pas la chaîne qui est le problème autant qu'il les insère respectivement dans les colonnes. Comme dans ce qui pourrait être ajouté à la boucle pour insérer les valeurs une colonne à la fois? ou insérez-les tous dans un enregistrement dans une table séparée? Je pense que le fait que toutes les colonnes se terminent par quelque chose comme un index (mois1, mois2, mois3 ...) Il devrait y avoir un moyen d'accéder et de les mettre à jour indépendamment dans la boucle. Merci


@DMS: Je n'utiliserais pas SQL dynamique dans un tel cas. Une seule déclaration est la voie à suivre, à la fois pour la raison de la performance et la maintenabilité du code.



0
votes

J'ai eu 99 problèmes J'ai donc utilisé des expressions régulières Maintenant j'ai 100 problèmes hahahahahahaha Il suffit de concaténer le Delim sur le début et la fin de la chaîne

solution SQL pure: xxx

/


0 commentaires