2

そのSQLコードを私のJavaアプリケーションに入れようとしました:

    SELECT DISTINCT
  StRzImRo.Rohstoff, StRo.Bezeichnung,
CAST (SUM(BwLsImAt.Lieferungen * StRzImRo.Menge * StAt.PROD__REZEPTURGEWICHT / Coalesce(StRz.PARM__BEZUGSGROESSE,1))  AS NUMERIC (9,3)) Rohstoffverbrauch_Gesamt FROM BwLsImAt       

JOIN StAt ON (StAt.IntRowId = BwLsImAt.Artikel)
JOIN StRz ON (StRz.IntRowId = StAt.PROD__REZEPTUR)
JOIN StRzImRo ON (StRzImRo.Master = StRz.IntRowId)
JOIN StRo ON (StRzImRo.Rohstoff = StRo.IntRowId)
WHERE StAt.IntRowId > 0
 GROUP BY  StRzImRo.Rohstoff, StRo.Bezeichnung
-- GROUP BY  StRzImRo.Rohstoff, StRzImRo.Menge, StAt.PROD__REZEPTURGEWICHT, Coalesce(StRz.PARM__BEZUGSGROESSE,1)

コードは完全に機能しており、IBSQL でテストされていますが、私の Java アプリケーションでは機能しません。私のアプリは他のコードでも正しく動作します。次のエラーが表示されます。

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 266
ON

誰かがこの問題で私を助けることができれば、私はとても幸せです. ありがとう!PS: 言葉遣いが下手で申し訳ありませんが、私はネイティブ スピーカーではありません。

4

1 に答える 1

2

このエラーはON、クエリの予期しない場所に があることを示しています。クエリ自体は問題ないように見えるので、Java アプリケーションでクエリを作成する方法に問題があると思います。クエリに空白が含まれていない可能性があります。

私の推測では、あなたは次のようなものを持っていると思います

query = "SELECT * " +
        "FROM table1" +
        "JOIN table2 ON " //.....

欠落した空白により、SQL は次のようになります。

SELECT * FROM table1JOIN table2 ON ....

ONパーサーにとって、これはエラーをトリガーするトークンに遭遇するまで完全に有効です。たとえば、パーサーはwith aliasからのSELECTwith *(all) column であることを識別します。解析中、サーバーはテーブルが実際に存在するかどうかをチェックしないため、存在しないという事実につまずくことはありません。これは、解析が正常に完了した後にチェックされます。table1JOINtable2table1JOIN

于 2013-07-24T13:02:55.643 に答える