【发布时间】:2016-08-02 14:54:27
【问题描述】:
我有一个 LINQ 查询,试图在 oracle 11g 上执行它。 相同的查询在 12c 上执行得非常好,但在 11g 上会出现以下错误。
ORA-00904: "Extent1"."ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
以下是生成的 SQL。只显示查询中出错的特定部分,
SELECT
"Extent1".ID,
(
SELECT "top".ADMIT_DATE
FROM
(
SELECT "Project7".ADMIT_DATE
FROM ( SELECT "Extent7".ADMIT_DATE FROM SYS.Table2 "Extent7" WHERE "Extent1".ID = "Extent7".ID )"Project7"
ORDER BY "Project7".ADMIT_DATE ASC
) "top"
WHERE ( ROWNUM <= 1) AND ROWNUM <= 1
)
AS C1 FROM SYS.Table1 "Extent1";
谁能解释一下是什么导致了 11g 中的问题!此查询在 12c 上运行良好。
更新: 这是 linq 查询。 以上 SQL 是这些 linq 查询生成的 SQL 的一部分。
var query = from p in context.Person
where p.Meetings.Any() &&
p.Vitals.Any(v => v.WT.HasValue && v.WT >= 20 && v.WT <= 300) &&
p.Detentions.Any(d => ((d.DX_TYPE != null && d.DX_TYPE == "09") || (d.DX_TYPE == null && "09" == null)) && d.DX.StartsWith("V") && d.DX != null) &&
p.Meetings.Any(meet => meet.Detentions.Any(d => ((d.DX_TYPE != null && d.DX_TYPE == "09") || (d.DX_TYPE == null && "09" == null)) && d.DX.StartsWith("250") && d.DX != null))
select new
{
p.HISPANIC,
p.RACE,
StudentID = p.PersonID,
AdmissionOn = p.Meetings.OrderBy(meet => meet.ADMIT_DATE).Select(meet => meet.ADMIT_DATE).FirstOrDefault(),
AdmissionYear = p.Meetings.OrderBy(meet => meet.ADMIT_DATE).Select(meet => meet.ADMIT_DATE).FirstOrDefault().Year,
AdmissionMonth = p.Meetings.OrderBy(meet => meet.ADMIT_DATE).Select(meet => meet.ADMIT_DATE).FirstOrDefault().Month
};
var g = query.GroupBy(k => new { Hispanic = k.HISPANIC, Race = k.RACE, AdmissionYear = k.AdmissionYear })
.Select(k => new { Hispanic = k.Key.Hispanic, Race = k.Key.Race, AdmissionYear = k.Key.AdmissionYear, Persons = k.Count() }).ToList();
【问题讨论】:
-
我很惊讶它可以在 12.1 中使用。通常,您不能引用超过一层深度的标识符。因此,“Extent1”将是您的
SELECT "top".ADMIT_DATE内联选择中的有效标识符,但不是嵌套更深一层的内联视图中的有效标识符。也许 12.1 已经放宽了这一要求,尽管我不记得读过任何表明这是有意更改的内容。但是,您真的在寻找那个解释,还是在两个版本中都可以使用的查询?您的表真的在sys模式中吗?这是非常不可取的。 -
实际上这东西在 12c 中工作正常!!我并不是在寻找具体的解释,我所寻找的只是一个可行的解决方案。我想在linq中写这个,上面只是一个生成的SQL。我把 linq 查询弄乱了。
-
也许包含生成该输出的 LINQ 查询会有所帮助。
-
@AlexPoole 添加了 LINQ 查询。