Betrachten Sie die Oracle-Dokumentation zu literals :
und die Dokumentation von leergefüllte Vergleichssemantik Zustände:
Da die linke Seite des Vergleichs ein CHAR(10)
ist und die rechte Seite ein Textliteral ist, dann wird eine mit Leerzeichen aufgefüllte Vergleichssemantik verwendet und 'hello ' = 'hello'
ist wahr.
Sie können dies an dem einfachen Beispiel sehen:
SELECT * FROM DUAL WHERE 'hello ' = 'hello';
Aktualisieren :
[TL;DR] Dieses Verhalten ist in allen Versionen von Oracle seit mindestens Oracle 7 (veröffentlicht 1992) aufgetreten. Ich habe aufgehört, nach der Dokumentation von Veröffentlichungen zu suchen, die älter als zwei Jahrzehnte sind, aber ich gehe davon aus, dass Sie feststellen werden, dass dies das Verhalten in den meisten (allen?) Versionen war.
Hier ist die Dokumentation für die verschiedenen Versionen:
- Oracle 12c Textliterale &mit Leerzeichen aufgefüllte Semantik
- Oracle 11g Textliterale &mit Leerzeichen aufgefüllte Semantik
- Oracle 10gR2 Textliterale &mit Leerzeichen aufgefüllte Semantik
- Oracle 9 Textliterale &mit Leerzeichen aufgefüllte Semantik
- Oracle 8 Textliterale &mit Leerzeichen aufgefüllte Semantik
- Oracle 7 Textliterale