Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / может кто-нибудь знает / 13 сообщений из 13, страница 1 из 1
10.12.2002, 10:53
    #32077712
Eter Panji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Можно ли как-то заставить проверяться
могут ли существовать строки удовлетворяющие данному условию.
Мне нужно различать результат в следующих вариантах.
Пример таблицы SAMPLE
ID

2

3

5

7

Мне нужно чтобы результат
SELECT 1 FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID>3 AND ID<5)
был бы одним а
SELECT 1 FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID>5 AND ID<3)
другим

Точнее мне нужно как раз отлавливать только вторые ситуации.
Чем бы это получить.
...
Рейтинг: 0 / 0
10.12.2002, 11:15
    #32077731
noname_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
SELECT 1 FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID>5 AND ID<3)
А как ID может одновременно быть больше 5 и меньше 3? Это новое слово в математике.
...
Рейтинг: 0 / 0
10.12.2002, 14:05
    #32077907
Eter Panji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
В математике может и новое, но на практике
это вполне нормальное условие в WHERE condition
Просто такое множество не существует не только в базе но и в природе.
Вот мне нужен признак которые говорил бы что при этих условиях не может существовать ни одной строчки. Ни сейчас ни потом.
...
Рейтинг: 0 / 0
10.12.2002, 14:45
    #32077946
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
так может всеже ID > 5 OR ID < 3 ??
...
Рейтинг: 0 / 0
10.12.2002, 15:14
    #32077969
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Для этого условия "WHERE ID>5 AND ID<3" запроса, я вижу только такой смысл: все строки у которых ID<=5 - не удовлетворяет условию. В этом случае второе условие "ID<3" уже не будет проверяться, что в каком смысле оптимизирует запрос.
Однако если же ID>5, то проверятся второе условие, а так как второе условие противоречит первому, то это автоматически приводит к тому что все строки, у которых ID>5, также не удовлетворяет условию.
Отсюда вывод:запрос
Код: plaintext
1.
SELECT  1  FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID> 5  AND ID< 3 ) 


всегда будет возвращать 0 строк, так как EXISTS всегда будет возвращать FALSE.

Поэтому слова "это вполне нормальное условие в WHERE condition
Просто такое множество не существует не только в базе но и в природе" могут воспиниматься только как параноидальный бред.

Единственный смысл я вижу только в том случае, когда значения 3 и 5 - это не конкрентные значения, а значения переменных привязки или подстановки, то есть критерии поиска, которые указывает пользователь, который иногда может задавать их некорректно. Признак которые говорил бы что при этих условиях не может существовать ни одной строчки - это просто - если вторая переменная меньше первой. Или определять разницу между вторым и первым числом и определять знак. Если "-" то и есть признак.
...
Рейтинг: 0 / 0
10.12.2002, 15:54
    #32077999
noname_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Я кажется понял. Необходимо различать, почему запрос не вернул ни одной строки. То-ли нет строк, удовлетворяющих данному условию, то-ли условие составлено некорректно. Только для этого, боюсь, надо делать семантический анализ самого запроса (условия where). Oracle здесь не помощник.
...
Рейтинг: 0 / 0
10.12.2002, 17:57
    #32078101
Igorzxc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
SQL>SELECT 1 FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID>3 AND ID<5) ;

1
----------
1

SQL>SELECT 0 FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID>5 or ID<3) ;

0
----------
0
...
Рейтинг: 0 / 0
10.12.2002, 19:16
    #32078187
Eter Panji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Совершенно прав Noname от 15:54
Этот условие генериться програмно , точнее говоря двумя программами, которые общаются через базу.
Хотелось бы получать сообщение о "некорректности условий".
Однако вижу ничего не получается.
Анализатор писать не хочется, тормозить всё будет, но ...
...
Рейтинг: 0 / 0
10.12.2002, 20:04
    #32078205
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Если охота проверять "правильность" условий не в общем случае, а для конкретной таблицы с конкретными данными наподобе:

Код: plaintext
1.
2.
3.
4.
create table sample (
  in integer primary key
)
/


можно, к примеру, сперва сделать запрос из вспомогательной таблицы, в которой наверняка присутствуют _все_ значения из диапазона между наименьшим и наибольшим значением параметров, технология таких запросов описана вот здесь:

http://otn.oracle.com/oramag/oracle/02-sep/o52sql.html

и если этот вспомогательный запрос не вернул ни одной записи, значит, что-то не так... Но в случае необходимости получения результатов при помощи больше чем одним запросом меня всегда смущает возможность рассинхронизации данных: между двумя запросами содержимое таблицы может измениться.
...
Рейтинг: 0 / 0
10.12.2002, 20:16
    #32078212
Eter Panji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
К сожалению это мне никак не помогает.
Запросы могут быть абсолютно бредовыми с любыми заворотами типа LIKE или EXISTS
...
Рейтинг: 0 / 0
10.12.2002, 20:24
    #32078214
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
"Бредовые" запросы из одной таблицы- это в схему укладывается. Другое принципиально: они выбирают данные из разных таблиц с разной структурой? Если да, то пытаться поймать разницу ответов "может возвратить" и "должен возвратить" имхо не стоит.
...
Рейтинг: 0 / 0
10.12.2002, 20:30
    #32078219
Eter Panji
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Это запрос по одной таблице, но в
Where clause может очутиться подзапрос
типа
Код: plaintext
FROM AAA WHERE ID IN (SELECT * FROM BBB)
...
Рейтинг: 0 / 0
10.12.2002, 20:39
    #32078221
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
может кто-нибудь знает
Тогда обойтись без ручной разборки запроса можно лишь при возможности классифицировать все возможные условия, т.е. составить их список (без конкретных значений параметров привязки) и проверять каждый по отдельности. В общем же случае, повторюсь, задача может быть не для pl/sql.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / может кто-нибудь знает / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]