Scission de chaîne et de réitérer pour chaque valeur dans une procédure stockée
J'ai une exigence d'Oracle, où je dois passer une chaîne séparée par des virgules des codes de pays à une procédure stockée Oracle.
À l'intérieur d'une procédure stockée je veux diviser la chaîne de virgule et de réitérer pour chaque code de pays.
Je veux un SP qui est similaire comme suit:
PROCEDURE Get_Query
(
v_company IN VARCHAR2,
) IS
sqlstr VARCHAR2(32767);
BEGIN
/*
split the v_company on comma (e.g. IN,US,...etc)
iterate for each country code
*/
END;
C'est un répandues demande (essayer de Googler, "stackoverflow oracle analyser csv chaîne"). Il n'y a pas de pénurie de documentation sur ce sujet.
OriginalL'auteur Mandar Patil | 2015-04-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser DBMS_UTILITY.COMMA_TO_TABLE.
La DBMS_UTILITY paquet fournit divers de l'utilitaire de sous-programmes. L'un de ces utilitaires est COMMA_TO_TABLE procédure, qui convertit une liste délimitée par des virgules de noms dans un PL/SQL de la table des noms.
Par exemple,
Mise à JOUR @ruudvan, il y a des restrictions pour l'utilisation de
COMMA_TO_TABLE
comme cela ne fonctionnera pas si vous avez mots-clés en tant que chaîne délimitée commeIS,AS
etc.De surmonter les restrictions de
COMMA_TO_TABLE
, il existe de nombreuses autres façons de le faire, voir Comment diviser délimité par des virgules chaîne en lignes dans OraclePar exemple, vous pouvez utiliser une EXPRESSION RÉGULIÈRE comme indiqué ci-dessous:
Cas de Test
Nous allons vérifier:
Bien sûr il y a des limite avec l'intégré dans le paquet. C'est la raison pour laquelle j'ai fourni le lien vers mon article où j'ai démontré diverses méthodes. Je vais le laisser jusqu'à l'OP de revenir et de lui demander s'il a besoin de plus d'assistance. Si je dois aller plus loin dans les détails et de fournir à tous les micro-détails ici, ce serait comme écrire un livre. De toute façon, merci pour le commentaire. Je serai plus qu'heureux de vous aider OP si il revient avec d'autres préoccupations.
Vous avez suffisamment de rep savoir comment StackOverflow œuvres. Nous sommes censés fournir des réponses sur ce site. Offrant une sous-solution par - et comme @ruudvan points,
COMMA_TO_TABLE()
en est que plus un lien vers votre blog n'est tout simplement pas assez bon.et ruudvan, juste des mecs assez. Ajout d'une complète solution de travail. Merci pour me pousser 😉
OriginalL'auteur Lalit Kumar B
Cette utilisation des expressions régulières convertit la chaîne d'entrée dans un flux de jetons qui peuvent être traités comme l'ensemble de résultats de toute autre instruction SELECT.
OriginalL'auteur APC