2013-07-24 78 views
2

因此试图把该SQL代码为我的Java-aplication:SQL火鸟实施IBSQL

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) 

的代码是完全funcional和IBSQL测试,但在我的Java应用程序无法正常工作。 我的应用程序可以正常使用其他代码。我得到这个错误:

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

如果有人能帮我解决这个问题,我会很高兴。谢谢! PS:对不起我的语言不好,但我不是母语的人

+0

您可能想要将查询中的代码与您的Java应用程序中的完全相同。错误表明在你的查询中有一个意外的地方有一个“ON”,并且由于查询本身看起来很好,我猜想问题在于你在Java应用程序中构造查询的方式。查询中可能缺少一些空白。 –

+0

谢谢你的帮助!是的,我的java应用程序中的“FROM BwLsImAt”后面有一些空白符。谢谢! – Jacob

+0

我也发表了我的评论作为答案 –

回答

2

错误表明在你的查询中有一个意外的地方有一个ON,并且由于查询本身看起来很好,我的猜测是问题是用你在Java应用程序中构建查询的方式。查询中可能缺少一些空白。

我的猜测是,你有类似

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

缺失的空白将使SQL:

SELECT * FROM table1JOIN table2 ON .... 

解析器,这是完全合法的,直到它遇到的ON令牌,该令牌触发错误。例如解析器识别它是SELECT,*(全部)列table1JOIN(别名table2)。在解析期间,服务器不检查表是否确实存在,所以它不会因table1JOIN不存在而跳闸。解析成功完成后检查。