【问题标题】:Failed to retrieve data from the database ORA-01427无法从数据库中检索数据 ORA-01427
【发布时间】:2018-02-15 07:16:22
【问题描述】:

我正在运行的 Crystal Report 收到错误消息。它说“无法从数据库中检索数据”。然后它还显示“ORA-01427:单行子查询返回多于一行”。看起来很简单,但我无法弄清楚。我在报告中内置了一个没有子查询的命令:

SELECT WA.HRORGANIZATION,TRIM(PA.ACTOR) AS "Epass",E.EMPLOYEE,TRIM(E.PRESENTATIONNAMESNAPSHOT),WA.HRORGANIZATIONUNIT,VW.ENTITYORGUNIT,VW.ENTITY
FROM LTMPROD.AGENT AG
LEFT OUTER JOIN LTMPROD.PARENTAGENT PA      ON PA.PARENTAGENT = AG.PARENTAGENT 
LEFT OUTER JOIN LTMPROD.EMPLOYEE E          ON TRIM(AG.KEYTEXT) = TRIM(E.HRORGANIZATION)||', '||TRIM(E.EMPLOYEE)
LEFT OUTER JOIN LTMPROD.WORKASSIGNMENT WA   ON WA.EMPLOYEE = E.EMPLOYEE
                                            AND WA.WORKASSIGNMENT = E.PRIMARYWORKASSIGNMENT
LEFT OUTER JOIN LTMPROD.XXX_ORGUNIT_ENTITY_VIEW VW  ON VW.HRORGANIZATIONUNIT = WA.HRORGANIZATIONUNIT
WHERE AG.BORBUSINESSCLASSNAME = 'Employee'
AND TRIM(PA.ACTOR) = '{?LAWSONRS_CurrentUser}'

我在记录选择中也有一个公式:

if {?LAWSONRS_CurrentUser} = "xyz" then  
    {JOBPOSTING.PDRBEGIN} in {?Start Date} to {?End Date} 
else   
{cmdEpass.Epass} = {?LAWSONRS_CurrentUser}           
and {XXX_ORGUNIT_ENTITY_VIEW.ENTITYORGUNIT} IN 
(
    SELECT {cmdEpass.ENTITYORGUNIT} 
    CASE 606: [606]      
    CASE 609: [609,610]  
    CASE 610: [609,610]  
    CASE 883: [883]      
    DEFAULT : [0]
)
and 
{JOBPOSTING.PDRBEGIN} in {?Start Date} to {?End Date}

这个错误会在哪里发生(对于任何格式问题,抱歉)?如果我完全删除公式,报告运行得很好。所以我认为问题不在于命令。但我仍然想根据用户 Epass 进行过滤。

【问题讨论】:

  • 看起来您的公式正在返回多个值——并且您在 WHERE 子句中使用它并进行了等式比较。
  • 有什么建议吗?
  • 不要从函数返回多个值或使用 IN 代替 =
  • 这个公式在哪里使用/调用?

标签: sql oracle crystal-reports report


【解决方案1】:

您的公式返回了多个元素。

您可以将= 更改为 IN ( ... )

或者使用LIMIT 1 只选择一行。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2012-09-20
    相关资源
    最近更新 更多