Oracle
 sql >> Base de données >  >> RDS >> Oracle

Numéro Oracle invalide dans la clause

Une modification de la réponse de phonetic_man qui autorisera les éléments NULL dans la liste. Le format regex de '[^,]+' pour l'analyse des listes délimitées ne gère pas les éléments de liste NULL et renverra une valeur incorrecte s'il en existe une et son utilisation doit donc être évitée. Changez l'original en supprimant le chiffre 2 par exemple et voyez les résultats. Vous obtiendrez un '3' à la position du 2ème élément ! Voici une méthode qui gère le NULL et renvoie la valeur correcte pour l'élément :

SELECT TRIM(REGEXP_SUBSTR(str, '(.*?)(,|$)', 1, LEVEL, NULL, 1)) str
    FROM ( SELECT '1,,3,4' str FROM dual )
    connect by level <= regexp_count(str, ',') + 1;

Voir ici pour plus d'informations et de preuves :https://stackoverflow.com/a/31464699/2543416