ASP的objConn.execute能否处理使用子查询factoring with子句的SQL查询?
我有一个很长的SQL语句,基本上是:ASP的objConn.execute能否处理使用子查询factoring with子句的SQL查询?,sql,oracle,asp-classic,with-clause,subquery-factoring,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) 我得到以下错误: ODBC驱动程序的Microsoft OLE DB提供程序
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)
我得到以下错误:
ODBC驱动程序的Microsoft OLE DB提供程序错误“80040e37”
[Microsoft][ODBC驱动程序for Oracle][Oracle]ORA-00942:表或视图不存在
/Application/xxxxx/yyyy/myfilename.asp,第168行
第168行是set rs=objConn.executestrSQL行
我使用这些相同的表运行了几个其他的查询,并使用set rs=objConn.executestrSQL行将它们发布到了在线,没有问题。我唯一能确定的是,与此SQL查询不同的是子查询分解
我尝试将整个查询包装到它自己的select语句中,如:
select * from (with a as blah blah... entire original query)
但这仍然会引发同样的错误。我可以不用set吗
rs = objConn.execute(strSQL)
结合子查询分解?这是否不受支持?还是有什么工作要做?或者完全是别的什么
谢谢。Microsoft OLE DB Provider for ODBC驱动程序非常旧。它是在Oracle 7出现时创建的,从那时起就没有真正更新过。随Oracle 9.2一起添加了WITH子句 我很惊讶您从解决方案中选择的*不起作用。这正是我们正在使用的,而且对我们来说效果很好
另一种解决方案是使用Oracle Provider for OLE DB,而不是Microsoft驱动程序。它由Oracle提供,并随Oracle的每个版本更新。我很愚蠢。将select*从整个块环绕确实有效。我的错误被抛出是因为我忘了我正在尝试加入一个很少使用的旧表,该表实际上位于另一个我没有连接到的模式中。我解决了这个问题,重新编写了查询,将一些需要的数据从那个模糊的表中拉到另一个我连接到的表中,并包含了我需要的相同数据。啊,我把它复杂化了。是的,select*from解决方案确实有效。“我的表或视图名称不存在”错误被抛出,因为我试图从中加入的许多表中有一个位于我未连接到的其他架构中。我完全忽略了这个报表实际上有一个与我们通常不使用的不同表的小连接。谢谢,我很笨。将select*从整个块环绕确实有效。我的错误被抛出,因为我忘了我正在尝试加入一个表,该表实际上位于一个不同的架构中,而我没有连接到该架构。您应该将此作为您的答案发布。啊,谢谢,添加。我不熟悉在堆栈溢出上发布问题,也没有看到“添加答案”按钮。