gpt4 book ai didi

java - Sybase 数据上下文 : The column prefix does not match with a table name or alias name

转载 作者:行者123 更新时间:2023-12-01 10:31:43 25 4
gpt4 key购买 nike

我们正在核心java代码中处理sybase数据库。我们使用 org.eobjects.metamodel.DataContext 来解析查询。

String sCol[]=table.getColumnNames();
Query query=dataContext.query().from(table.getName()).select(sCol).toQuery();
return new QueryIterator(dataContext.executeQuery(query).iterator());

但它正在执行查询。相同的代码可以很好地与 Oracle 数据库一起解析和执行查询。

生成的一些查询示例是:

  • 从所有者名称.城市中选择城市.城市名称
  • 从 City 中选择 City.CityName
  • 从所有者名称.城市中选择城市名称
  • 从城市中选择城市名称
  • 从所有者名称.城市中选择所有者名称.城市.城市名称
  • 从所有者名称中选择“城市”.“城市名称”。“城市”
  • 从所有者名称.城市中选择 *

没有执行任何上述查询。 我们收到这些错误:

  • 无法解析 FROM token :“ownername”.“City”
  • 无法执行查询:列前缀“City”与查询中使用的表名或别名不匹配。 FROM 子句中未指定该表,或者该表具有必须使用的相关名称。
  • 无法解析 SELECT token :ownername.City.CityName

我们如何使用元模型和 SYBASE 数据库执行查询,或者还有其他方法来执行 sybase 查询吗?

最佳答案

Oracle(和 Microsoft)使用 Sybase ASE 不使用的模式逻辑构造。在 SAP/Sybase ASE 中,数据库中的所有表和列都位于同一架构中。不过,用户可以在数据库中拥有自己的对象,因此可以使用用户所有权来模仿某些架构行为,但这需要额外的努力。

对于 Sybase,正确的查询语法是:

SELECT [ Col1, Col2 | * ]
FROM [dbName].[ownerName.]TABLE

就你的情况

SELECT CityName
FROM dbName.ownername.City

在 Sybase ASE 中,最佳实践通常是让所有对象都归“dbo”所有,因此在这种情况下,您可以在查询中省略所有者:

SELECT CityName
FROM dbName..City

完整的查询语法和信息可以在Query Section of the Transact SQL Users Guide in the documentation.中找到

关于java - Sybase 数据上下文 : The column prefix does not match with a table name or alias name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com