J'ai une colonne avec des valeurs séparées par tuyaux tels que: p>
'23 | 12,1 | 450 | 30 | 9 | 78 | 82.5 | 92.1 | 120 | 185 | 52 | 11 ' P>
Je veux analyser cette colonne pour remplir une table avec 12 colonnes correspondantes: mois1, mois2, mois 3 ... mois12. P>
alors mois1 aura la valeur 23, mois2 la valeur 12.1 etc ... p>
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? P>
Merci. P>
3 Réponses :
Vous pouvez utiliser avec une boucle dans PL / SQL: P> regexp_substr code> (10g +):
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;
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.
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: p> / p> p>
Dupliquer possible de Comment remplir une variable de mon propre type de données créé dans Oracle Pl / SQL?