2011-09-06 38 views
1

为什么Oracle的报告构建器(连接到11g数据库)不允许以下有效的SQL?依赖于Oracle报告中的WITH子句

with abc as 
(Select 1 as x from dual), 
def as 
(Select 2 as y from abc) 
select x,y from abc,def 

我正在ORA-00942: table or view does not exist (Select 2 as y from ==>abc) 的上方。 当我从连接到相同的11g数据库的SQL Developer执行上述SQL时,它运行时没有任何问题。 以下独立WITH子句是由报告生成器虽然接受了,

with abc as 
(Select 1 as x from dual), 
def as 
(Select 2 as y from dual) 
select x,y from abc,def 

有没有办法在报告中做此构建或者我应该只需要补习先用子句中的第二个的FROM子句?提前致谢。

PS:报表生成器的版本是10.1.2.0.2

+0

您正在编写报告的哪个版本的Oracle Reports Builder? – Ollie

+0

@Ollie:请看我修改的问题。 – digdug

回答

3

有与张贴在这里的Oracle论坛条款问题的解决方法: https://forums.oracle.com/forums/thread.jspa?threadID=710036

那你可以实现来解决你的问题。

或者,您是否可以不在查询中的内联视图中使用当前的WITH查询? (编码: )像这样(使用你的代码)

SELECT x, y 
    FROM 
     (SELECT 1 AS x 
      FROM dual) abc, 
     (SELECT 2 AS y 
      FROM dual) def 
+0

我不明白你的意思。您能否举一个例子来在内联视图中使用它? – digdug

+0

Nvm,我明白了。内联视图 - >在另一个SELECT的FROM子句中使用SELECT。我不想这样做的原因是,实际的查询是巨大的,在FROM子句中使用它会非常影响可读性。 – digdug

+0

@Digdug,我很欣赏你希望在你的查询中提高可读性,但让它工作是第一步。也许你可以把最复杂的查询放入WITH子句中,并内联较不复杂的查询?不是很好,但它会工作。 – Ollie

0

我有同样的问题,这是我如何克服的: 如果您使用的是直列别名,明确它(内,外...)连接到另一台。例如:

with MyTabA as(
    select 1 theID, 'AA' 
    thetext from dual 
), 
MytabB as(
    select 1 theID, '123 street Paul' 
    theaddress from dual union select 2 theID, '123 street Paul' 
    theaddress from dual union select 3 theID, '123 street Paul' 
    theaddress from dual 
) 
Select MytabA.theid, mytaba.thetext, mytabb.theaddress 
from MyTabA, MyTabB 
Where MyTabA.theID = MyTabB.theid 
;