2016-10-19 4 views
1

Was ist falsch mit dieser Abfrage?Kann nicht einfach Abfrage ausführen, Fehlermeldung "fehlende rechte Klammer"

select author_num from (henry_author where (contains(author_first,'Albert') > 0)) 

Hält mir einen Fehler, der eine rechte Klammer fehlt?

+1

Warum haben Sie vor Ihrem Tabellennamen eine runde Klammer? – SnakeDoc

+0

Ihr SQL ist fehlerhaft. Zu viele Klammern. Du solltest so wenig wie möglich haben. Ich würde sagen, dass Sie höchstens 2 Klammern mit dem, was Sie haben, benötigen, und mit einer etwas anderen Abfrage können Sie dies mit 0 Klammern erreichen. – Compass

+0

Weil, bevor es mir einen 'ORA-20000 gab: Oracle Text Fehler: DRG-10599: Spalte ist nicht indiziert' Fehler. :/ –

Antwort

1
SELECT author_num FROM henry_author WHERE author_first LIKE '%Albert%'; 

oder, wahrscheinlich besser für Dateninkonsistenzen Konto:

SELECT author_num FROM henry_author WHERE UPPER(author_first) LIKE '%ALBERT%'; 

Die % ist ein Platzhalter für: null oder mehr Zeichen. Also %ALBERT% bedeutet alles kann vor oder nach 'ALBERT', was effektiv ist, was Ihre Funktion macht.

UPPER ist nur eine Funktion, die die Zeichenfolge in Großbuchstaben umwandelt, was es einfacher macht, mit möglichen Dateninkonsistenzen umzugehen, d. jemand in ‚albert‘ getippt statt ‚Albert‘ usw.

Da Sie JDBC verwenden, möchten Sie vielleicht Ihre Anfrage strukturieren PreparedStatement zu verwenden, die Sie Ihre Abfrage ermöglicht zu parametrieren wie so:

final String sqlSelectAuthorNum = "SELECT author_num FROM henry_author WHERE UPPER(author_first) LIKE ?"; 
final PreparedStatement psSelectAuthorNum = conn.prepareStatement(sqlSelectAuthorNum); 

// now execute your query someplace in your code. 
psSelectAuthorNum.setString(1, "%" + authorName + "%"); 
final ResultSet rsAuthorNum = psSelectAuthorNum.executeQuery(); 
if (rsAuthorNum.isBeforeFirst()) { 
    while (rsAuthorNum.next()) { 
     int authorNumber = rsAuthorNum.getInt(1); 
     // etc... 
    } 
} 
+0

Was bedeutet das? http://imgur.com/a/tTNNx –

+0

Es bedeutet, was sagt - Sie haben einen ungültigen Spaltennamen in Ihrer Abfrage. Entweder 'autorn_num' oder' author_first' existiert nicht in der Tabelle 'henry_author' oder sie sind falsch geschrieben. – SnakeDoc

+0

Wow. Ich danke dir sehr! : D –

Verwandte Themen