【问题标题】:SQL Statement in ClearQuest causes ORA-00907:missing right parenthesisClearQuest 中的 SQL 语句导致 ORA-00907:缺少右括号
【发布时间】:2013-10-25 10:55:00
【问题描述】:

我正在尝试从 ClearQuest 中提取数据,它在基于 Eclipse 的前端运行一个 Oracle 数据库。使用内置的查询构建器,我无法限制提供的数据足以让我到达我想要的地方。

我的目标:我希望从两个表中提取数据。表 2 与表 1 具有多对一的关系。从数据库中提取数据时,我希望从表 2 中提取与表 1 中的指定记录集有关系的最新记录。

我的尝试:我开始编写一个简单的查询,该查询使用第二次选择从表 2 中获取最新记录。我无法在我的机器上设置 oracle 服务器,因此不得不在 mysql 中尝试查询并对其进行调整为甲骨文。这是查询:

select t1.id, t1.name, t2.set_date
from test_table t1, link_table t2
where t2.test_id = t1.id
      and t2.set_date = (select set_date
                         from link_table
                         where t1.id = test_id
                         order by set_date desc
                         limit 1)
      and t1.state = 'Closed';

在 MySQL 中运行它可以正常工作! 更改查询以匹配 Oracle 标准给了我这个;

SELECT t1.id,t1.name,t2.set_date 
FROM   test_table t1,link_table t2 
WHERE  t2.test_id = t1.id 
       AND t2.set_date = (SELECT set_date 
                          FROM   link_table 
                          WHERE  t1.id = test_id 
                                 AND ROWNUM = 1 
                          ORDER  BY set_date DESC) 
       AND t1.state = 'Closed'; 

在测试通过 Oracle 格式化程序(例如 Instant SQL Formatter)运行它时,它运行良好。但是,当将查询输入 ClearQuest 以提取数据时,它给了我错误; ORA-00907: missing right parenthesis.

我整个早上都在尝试更改此设置,但无法使其正常工作。我错过了什么?

【问题讨论】:

  • 根据this support response,不支持嵌套SQL语句。这可以解释吗?
  • 这当然可以解释。问题是我无法真正使用嵌套选择(至少据我所知不是......)。

标签: sql oracle clearquest


【解决方案1】:

您可以试试下面的代码吗:- 与嵌套查询相比,使用分析查询提高了性能。

   select t1.id,t1.name,t2.set_date 
FROM   test_table t1,(select * from (select set_date,test_id,row_number() over (partition by test_id order by set_date desc ) rn from link_table) where rn =1) t2 
WHERE  t2.test_id = t1.id AND t1.state = 'Closed';

我无法测试相同的。遇到问题请回复

【讨论】:

  • 我会在查询完成后立即对此进行测试。
  • 好吧!当它发生在 5% 的几分钟后程序崩溃了......我认为这与我的表有点大有关。我将不得不导出大部分数据并在另一个程序中执行选择。这确实解决了错误的问题!谢谢!
【解决方案2】:

我认为在处理 order by 之前无法计算行号。因此,它在子选择中的该级别不可用。但是,如果您为 sub select 设置别名并将 where rownum = 1 添加到外部 where 子句中,它应该可以工作。

【讨论】:

  • 我认为它应该可以正常工作,像您建议的那样删除子查询中的 ORDER BY 已经删除了生成的错误。现在它只需要坐一会儿就可以运行查询(目前在 5% 并且没有移动...)
  • forums.oracle.com/message/2696199 这就是我认为它会起作用的原因:D。但是,在 from 语句中内联一次创建子查询可能会更快/更有效,因此它只需订购一次。而不是 t1, t2 中的每一行。我会尝试下面列出的分区。在查询中使用分析具有惊人的性能。
猜你喜欢
  • 2016-02-20
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2017-03-11
  • 1970-01-01
  • 2018-05-23
相关资源
最近更新 更多