2016-10-19 13 views
1

このクエリで何が問題になっていますか?単純なクエリを実行できません。 "右括弧がありません"というエラーが表示される

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

右括弧が欠けているというエラーが表示されますか?データの不整合を考慮して

+1

なぜテーブル名の前に括弧がありますか? – SnakeDoc

+0

SQLの形式が正しくありません。括弧が多すぎます。できるだけ少なくしてください。私はあなたが持っているもので2つの括弧しか必要としないと言いたいですが、わずかに異なるクエリでは、これを0括弧で実現することができます。 – Compass

+0

以前は 'ORA-20000:Oracle Textエラー:DRG-10599:列は索引付けされていません 'というエラーが発生していたためです。 :/ –

答えて

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

または、おそらくより良い:

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

%がゼロ以上の文字に一致するワイルドカードです。したがって、%ALBERT%は、実質的にあなたの機能がやっている 'ALBERT'の前後にあることを意味します。

UPPERは、文字列を大文字に変換する機能にすぎず、潜在的なデータの不一致を処理することが容易になります。などの代わりに「アルバート」の「アルバート」に入力された誰か、

あなたはJDBCを使用しているので、あなたはそのようなあなたのクエリをパラメータ化することができますどのPreparedStatementを使用するようにクエリを構築することがあります:

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

これはどういう意味ですか? http://imgur.com/a/tTNNx –

+0

これは、あなたのクエリに無効な列名があるということを意味します。 'author_num'または' author_first'はテーブル 'henry_author'に存在しないか、間違っています。 – SnakeDoc

+0

うわー。どうもありがとうございます! :D –

関連する問題