Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ungültige Oracle-Nummer in Klausel

Eine Änderung an der Antwort von phonetic_man, die NULL-Elemente in der Liste zulässt. Das Regex-Format von '[^,]+' zum Analysieren von begrenzten Listen verarbeitet keine NULL-Listenelemente und gibt einen falschen Wert zurück, falls einer vorhanden ist, und daher sollte seine Verwendung vermieden werden. Ändern Sie das Original, indem Sie beispielsweise die Nummer 2 löschen, und sehen Sie sich die Ergebnisse an. Sie erhalten eine '3' an der Position des 2. Elements! Hier ist ein Weg, der NULL behandelt und den korrekten Wert für das Element zurückgibt:

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;

Weitere Informationen und Beweise finden Sie hier:https://stackoverflow.com/a/31464699/2543416