2 Stimmen

Oracle-Abfrage gibt 0 Datensätze zurück, wenn Args übergeben werden

Wenn ich eine Sql wie diese ausführe:

select * from tbl_emp where emp_name like '%%'

Sie gibt mir alle Aufzeichnungen. Wenn ich es so ausführe:

select * from tbl_emp where emp_name like : arg_emp_name

Führen Sie dann die Abfrage aus, und übergeben Sie arg_emp_name als '%%' gibt er 0 Datensätze zurück. Warum ist dieses Verhalten so? Ich danke Ihnen.

5voto

Conrad Frix Punkte 50686

Das sollte gut funktionieren. Das folgende Beispiel liefert die gleiche Anzahl von Datensätzen wie no where Klausel

EXEC :arg_emp_name := '%%';

SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE  :arg_emp_name

Wenn Sie der Zeichenkette mehr hinzufügen

   EXEC :arg_emp_name := '%ABC%';

   SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE  :arg_emp_name

nur Tabellen mit ABC im Namen werden zurückgegeben

Ich möchte jedoch anmerken, dass es kein Leerzeichen zwischen : y arg_emp_name

Dieses Leerzeichen verursacht den Fehler

Error starting at line 4 in command:
SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE  : arg_emp_name
Error report:
SQL Error: ORA-01008: not all variables bound
01008. 00000 -  "not all variables bound"
*Cause:    
*Action:

0voto

Sachin Shanbhag Punkte 52789

NEUE ANTWORT :-

Aus den Kommentaren zu der Antwort geht hervor, dass das Orakel keinen Unterschied zwischen den literalen und den verbindlichen Variablenwerten sieht. Die Bedeutung ändert sich nicht, wie ich in meiner alten Antwort erwähnt hatte. Die Antwort von @Conard erscheint logisch.

ALTE ANTWORT :-

Wenn Sie die '%%' als Argument angeben, werden sie wortwörtlich als solche Zeichenfolgen aufgefasst und verlieren ihre besondere Bedeutung, die sie bei der Verwendung in der Abfrage haben.

Das heißt, die Abfrage sucht in Ihrer Spalte nach Daten, die '%%' anstatt es als LIKE zu behandeln. Daher erhalten Sie 0 Datensätze.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X