2016-06-11 2 views
-3

Ich versuche, die folgende Abfrage zu tun:UCASE und UPPER SQL-Funktionen

String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) "; 
query += "LIKE '" + lastName.toUpperCase() + "%'"; 

in einem Beispiel für die Verwendung eines Servlet Zugriff auf eine Datenbank Aber ich erhalte die Fehlermeldung:

Excepcion java.sql.SQLSyntaxErrorException: ORA-00904: "UCASE": invalid identifier 

Auf der anderen Seite, wenn ich die Funktion UPPER sql verwenden, funktioniert das Beispiel, aber die Ergebnisse zeigen nicht die Werte der Spalte LASTNAME in Großbuchstaben. Ich verstehe nicht, was passiert.

+2

Was ist, wenn 'lastName'' 'ist; DROP DATABASE ...; - '? – lad2025

+0

Ich weiß es nicht. – julian

+1

Die Datenbank wird gelöscht, allerdings nur, wenn der Benutzer, der die Anwendung verwendet, die entsprechende Berechtigung hat. @ lad2025 bedeutet, dass Sie Ihre Eingabe vor der Verwendung in einem SQL-Feuern sterilisieren sollten. – SubhasisM

Antwort

3

Du vergleichst nur die oberen Fallwerte, aber Sie sind die Auswahl der tatsächlichen Werte mit select *

+0

Ok. Was passiert aber mit der UCASE-Funktion? – julian

+3

Soweit ich weiß, UCASE ist keine gültige Funktion auf Oracle (oder SQL Server, die Sie auch markiert haben) –

+0

https://docs.oracle.com/database/121/SQLRF/functions002.htm#CJAEEJFC –

1

den Groß Namen in Ihrer resultset Sie UPPER brauchen, um in Ihrer Auswahlliste zu verwenden, nicht UCASE, wie dies:

String query = "SELECT UPPER(LAST_NAME) AS UPPERNAME, * FROM EMP WHERE UPPER(LAST_NAME) "; 
query += "LIKE '" + lastName.toUpperCase() + "%'"; 

Was Ihr Code hier tun baut eine Abfrage-String namens query. Sobald query abgeschlossen ist, wird es zum Parsen und Ausführen an die Datenbank gesendet.

Wenn Sie eine Abfrage für die Datenbank erstellen, müssen Sie die integrierten Datenbankfunktionen für den Teil der Abfrage verwenden, den die Datenbank parsen und ausführen soll. In Ihrem Beispiel macht Java toUpperCase unter lastName und setzt dieses Literal dann in die Abfragezeichenfolge, die zur Datenbank geht. UPPER(LAST_NAME) geht in die Query-Zeichenfolge wie sie ist, wird es einfach an die Datenbank übergeben und von der Datenbank ausgeführt werden. Es muss also eine Funktion sein, die die Datenbank parsen und ausführen kann: eine Oracle-Funktion, keine Java-Funktion.

Verwandte Themen