ASP 的 objConn.execute 能否处理使用子查询分解 with 子句的 SQL 查询?



我有一个很长的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驱动程序错误'80040e37'
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00942:表或视图不存在
/Application/xxxxx/yyyyy/myfilename.asp,第168行

第168行是set 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) 

与子查询分解结合使用?不支持吗?还是有别的办法?或者可能是完全不同的东西?

谢谢。

我很笨。将select * from()包裹在整个代码块周围确实有效。我的错误被抛出是因为我忘记了我正在尝试连接到一个旧的(很少再使用)表,这个表实际上在一个不同的模式中,我没有连接到它。我通过重写查询来解决这个问题,将一些需要的数据从那个模糊的表拉到我连接的另一个表中,这个表包含了我需要的相同数据。

Microsoft OLE DB Provider for ODBC Driver已经很老了。它是在Oracle 7出现时创建的,从那以后就没有真正更新过。WITH子句是在Oracle 9.2中添加的。

我很惊讶你的select * from ()解决方案不工作。这正是我们正在使用的,它为我们工作得很好。

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

最新更新