powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / может кто-нибудь знает
13 сообщений из 13, страница 1 из 1
может кто-нибудь знает
    #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
может кто-нибудь знает
    #32077731
noname_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT 1 FROM DUAL WHERE EXISTS(SELECT * FROM SAMPLE WHERE ID>5 AND ID<3)
А как ID может одновременно быть больше 5 и меньше 3? Это новое слово в математике.
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #32077907
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В математике может и новое, но на практике
это вполне нормальное условие в WHERE condition
Просто такое множество не существует не только в базе но и в природе.
Вот мне нужен признак которые говорил бы что при этих условиях не может существовать ни одной строчки. Ни сейчас ни потом.
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #32077946
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может всеже ID > 5 OR ID < 3 ??
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #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
может кто-нибудь знает
    #32077999
noname_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я кажется понял. Необходимо различать, почему запрос не вернул ни одной строки. То-ли нет строк, удовлетворяющих данному условию, то-ли условие составлено некорректно. Только для этого, боюсь, надо делать семантический анализ самого запроса (условия where). Oracle здесь не помощник.
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #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
может кто-нибудь знает
    #32078187
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно прав Noname от 15:54
Этот условие генериться програмно , точнее говоря двумя программами, которые общаются через базу.
Хотелось бы получать сообщение о "некорректности условий".
Однако вижу ничего не получается.
Анализатор писать не хочется, тормозить всё будет, но ...
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #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
может кто-нибудь знает
    #32078212
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению это мне никак не помогает.
Запросы могут быть абсолютно бредовыми с любыми заворотами типа LIKE или EXISTS
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #32078214
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Бредовые" запросы из одной таблицы- это в схему укладывается. Другое принципиально: они выбирают данные из разных таблиц с разной структурой? Если да, то пытаться поймать разницу ответов "может возвратить" и "должен возвратить" имхо не стоит.
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #32078219
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это запрос по одной таблице, но в
Where clause может очутиться подзапрос
типа
Код: plaintext
FROM AAA WHERE ID IN (SELECT * FROM BBB)
...
Рейтинг: 0 / 0
может кто-нибудь знает
    #32078221
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда обойтись без ручной разборки запроса можно лишь при возможности классифицировать все возможные условия, т.е. составить их список (без конкретных значений параметров привязки) и проверять каждый по отдельности. В общем же случае, повторюсь, задача может быть не для pl/sql.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / может кто-нибудь знает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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