Может ли ASP objConn.execute обрабатывать 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 для драйверов ODBC: ошибка "80040e37"
[Microsoft][Драйвер ODBC для Oracle][Oracle]ORA-00942: таблица или представление не существует
/Application/xxxxx/yyyyy/myfilename.asp, строка 168
Строка 168 является строкой set rs = objConn.execute(strSQL).
Я использовал эти же таблицы для запуска нескольких других запросов и размещения их в сети без проблем, используя строку set rs = objConn.execute(strSQL). Единственная вещь, которую я могу определить, отличается от этого запроса SQL - это факторинг подзапроса.
Я попытался обернуть весь запрос в его собственное выражение выбора, например:
select * from (with a as blah blah... entire original query)
Но это все равно выдает ту же ошибку. Могу ли я просто не использовать набор
rs = objConn.execute(strSQL)
в сочетании с подзапросом факторинга? Это не поддерживается? Или есть какая-то работа вокруг? Или это может быть что-то совсем другое?
Благодарю.
2 ответа
Я тупой. Обтекание select * from () вокруг всего блока действительно работает. Моя ошибка была сброшена, потому что я забыл, что пытался объединить старую (редко используемую) таблицу, которая фактически была в другой схеме, с которой я не был связан. Я решил проблему, переписав запрос, чтобы вывести некоторые необходимые данные из этой неясной таблицы в другую таблицу, к которой я был подключен, и содержал те же данные, что и мне.
Поставщик Microsoft OLE DB для драйвера ODBC очень старый. Он был создан, когда был Oracle 7, и с тех пор не обновлялся. Предложение WITH было добавлено в Oracle 9.2.
Я удивлен вашим select * from ()
Обходной путь не работает. Это именно то, что мы используем, и это прекрасно работает для нас.
Другое решение заключается в использовании Oracle Provider for OLE DB
вместо драйвера Microsoft. Он предоставляется Oracle и обновляется с каждым выпуском Oracle.