【问题标题】:oracle ora-00904 with symfony2 and doctrine2oracle ora-00904 与 symfony2 和教义2
【发布时间】:2014-06-12 18:48:15
【问题描述】:

我有一个学说 DQL 可以转换成这个 SQL:

SELECT o0_.id AS ID0, 
o0_.pmn AS PMN1, 
o0_.neteo AS NETEO2, 
sum(o1_.monto_total) AS SCLR3, 
o1_.periodo AS PERIODO4, 
o1_.pagado AS PAGADO5 
FROM operador o0_ 
LEFT JOIN operador_hub o2_ ON o0_.id = o2_.operador_id 
LEFT JOIN outcollect o1_ ON o0_.id = o1_.operador_id 
WHERE o0_.ishub = 0 
AND o0_.neteo = 1 
AND o0_.incluirReportes = 1 
AND o0_.pmn NOT IN ('CHLTM', 'CHLCM') 
AND o0_.id NOT IN (SELECT o3_.id FROM operador o3_ LEFT JOIN operador_hub o4_ ON o3_.id = o4_.operador_id LEFT JOIN outcollect o5_ ON o3_.id = o5_.operador_id WHERE (o4_.desde <= o5_.periodo AND (o4_.hasta >= o5_.periodo OR o4_.hasta IS NULL))) 
AND o0_.activo = 1 
GROUP BY o0_.pmn, PERIODO4 
ORDER BY o0_.pmn ASC

这给出了ORA-00904: "PERIODO4": identificador no válido

错误与 GROUP BY o0_.pmn, PERIODO4 行直接相关

这似乎与不能将查询转换为 ORACLE 语法的原则有关。我正在使用 OCI8 驱动程序。

有什么想法吗?

----编辑----

这里是 DQL:

SELECT partial operador.{id, pmn, neteo},                           
sum(outcollect.montoTotal) as montoOut,
outcollect.periodo as periodo,
outcollect.pagado as pagado
FROM RoamingOperadoresBundle:Operador operador
LEFT JOIN operador.operadorHub operadorHub 
LEFT JOIN operador.outcollect outcollect
WHERE operador.ishub = 0
AND operador.neteo = 1                          
AND operador.incluirReportes = 1
AND operador.pmn not in('CHLTM', 'CHLCM')
AND operador.id not in(SELECT op.id 
FROM RoamingOperadoresBundle:Operador op
LEFT JOIN op.operadorHub opHub
LEFT JOIN op.outcollect out
WHERE (opHub.desde <= out.periodo and (opHub.hasta >= out.periodo or opHub.hasta is null)))
AND operador.activo = 1
GROUP BY operador.pmn, periodo ORDER BY operador.pmn

【问题讨论】:

    标签: sql oracle symfony doctrine-orm


    【解决方案1】:

    我不确定您是如何生成此表表达式的,但您会收到错误消息,因为您没有在 GROUP BY 子句中包含所有非聚合列。

    另请注意 - 您不能按别名进行分组。您必须通过在table.column 表单中指定来引用该列。

    应该是这样的:

    GROUP BY o0_.pmn, o0_.neteo, o1_.periodo, o1_.pagado

    【讨论】:

    • 谢谢哥们!,现在错误是这个:SELECT o0_.id AS ID0, * ERROR en linea 1: ORA-00979: no es una expresion GROUP BY 所以我们继续。我将发布 DQL
    • 我不熟悉doctrine2,所以不知道你是否打算按照你的编辑风格生成表格表达式。但是,标准 SQL 表表达式遵循 SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY 逻辑模式,而您的 SQL 通过在同一个表表达式中包含 2 个 FROM 和 2 个 WHERE 子句违反了这一点。这可能就是您收到错误的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2012-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2016-11-25
    相关资源
    最近更新 更多