ASP的objConn.execute可以处理使用子查询factoring with子句的SQL查询吗?

时间:2014-05-22 18:45:54

标签: sql oracle asp-classic with-clause subquery-factoring

我有一个很长的SQL语句,基本上是:

with a as (select * from t1),  
  b as (select * from a, t2 where a.id=t2.id)  
select * from b

这个语句在我的TOAD应用程序中执行得非常好。但是,当我尝试将上述内容填充到字符串变量中并使用以下命令在ASP中运行时

set rs = objConn.execute(strSQL)

我收到以下错误:
Microsoft OLE DB Provider for ODBC Drivers错误'80040e37'
[Microsoft] [Oracle的ODBC驱动程序] [Oracle] ORA-00942:表或视图不存在
/Application/xxxxx/yyyyy/myfilename.asp,第168行

第168行是设置rs = objConn.execute(strSQL)行。

我已经使用这些相同的表来运行其他几个查询并使用set rs = objConn.execute(strSQL)行在线发布它们没有问题。我唯一可以确定的是,这个SQL查询是子查询因子。

我尝试将整个查询包装在它自己的select语句中,如:

select * from (with a as blah blah... entire original query)

但是仍然会引发同样的错误。我可以不使用set

rs = objConn.execute(strSQL) 

与子查询因子结合?这不受支持吗?或者是否有某种工作?或者它可能是完全不同的东西?

感谢。

2 个答案:

答案 0 :(得分:1)

我是愚蠢的。在整个块周围包装select * from()确实有效。我的错误被抛出,因为我忘了我试图加入一个旧的(很少使用的)表,实际上是在一个我没有连接到的不同模式中。我通过重写查询来解决问题,将一些所需的数据从那个模糊的表中提取到我连接到的另一个表中并包含我需要的相同数据。

答案 1 :(得分:0)

用于ODBC驱动程序的Microsoft OLE DB提供程序非常旧。它是在Oracle 7出现时创建的,并且从那时起就没有真正更新过。 WITH子句随Oracle 9.2一起添加。

我很惊讶您的select * from ()解决方法不起作用。这正是我们正在使用的,它对我们来说很好。

另一种解决方案是使用Oracle Provider for OLE DB而不是Microsoft驱动程序。它由Oracle提供,并随每个Oracle版本更新。

相关问题