Текущее время: Пт, июл 25 2025, 05:40

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 15:21 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
Привет, господа абаперы!
Помогите, пожалуйста, решить следующий вопрос:

есть примерно такой SQL-запрос

SELECT SINGLE value
INTO local_variable
FROM /bic/ADSO00
WHERE field = <fs>-field.

При этом должно быть не только соответствие значений, но и NULL значений, то есть, если в базе NULL и локальная переменная NULL, то эта запись была бы выбрана из БД.
По сути хотелось бы аналог ораклового NVL или как написать запрос вида
...
WHERE <fs>-field IS NULL OR field = <fs>-field

Поиском тут нашел старую темку, что вариант с проверкой локальной переменной на NULL не проходит. Есть ли какой-то обходной маневр, или придется жестко кодировать уловия на ABAP:

IF <fs>-field IS INITIAL.
SELECT ... WHERE field IS NULL.
ELSE.
SELECT ... WHERE field = <fs>-field.
ENDIF.


Спасибо, прошу прощения за сбивчивое описание.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 15:31 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Локальная переменная не может быть NULL. Начальное (initial) значение зависит от типа данных. В БД NULL попасть конечно может, но используется крайне редко, если речь идет о стандартной таблице, скорее всего никакого NULL там нет. Вообще, использование NULL в сапе не желательно


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 15:35 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
refeline написал:
По сути хотелось бы аналог ораклового NVL или как написать запрос вида
...
WHERE <fs>-field IS NULL OR field = <fs>-field


Что мешает так сделать? только WHERE field IS NULL OR field = <fs>-field

refeline написал:
Поиском тут нашел старую темку, что вариант с проверкой локальной переменной на NULL не проходит.


Что за тема?
refeline написал:
field ___ /bic/ADSO00

Что за поле? это индикатор? у него стоит галочка нач.значения?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 15:42 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Besa написал:
Что мешает так сделать? только WHERE field IS NULL OR field = <fs>-field

Значения с NULL так не достать. Тогда 2 селекта писать придется. Но сперва лучше убедиться, что у вас действительно NULL в поле. Как проверяли?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 15:49 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
zsap написал:
Besa написал:
Что мешает так сделать? только WHERE field IS NULL OR field = <fs>-field

Значения с NULL так не достать. Тогда 2 селекта писать придется. Но сперва лучше убедиться, что у вас действительно NULL в поле. Как проверяли?

Почему не достать? я доставал...
Убедится легко, сравнение кол-ва записей через селект в программе и через se11.
Записи с NULL залетают так - например, поле индикатор, без галочки нач.значение, при добавлении записи выставит NULL.
...На моей памяти так.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 15:58 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
условие WHERE field IS NULL OR field = <fs>-field если field = NULL теоретически должно так вычисляться

NULL IS NULL OR NULL = <fs>-field

TRUE OR NULL

NULL
соответственно, ничего не выбирается

Интересно, как вам в se11 удалось значения с NULL вытащить?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 16:18 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
zsap написал:
условие WHERE field IS NULL OR field = <fs>-field если field = NULL теоретически должно так вычисляться

NULL IS NULL OR NULL = <fs>-field

TRUE OR NULL

NULL
соответственно, ничего не выбирается

Интересно, как вам в se11 удалось значения с NULL вытащить?

1 - правильно, одно из условий выполнится, запись выберется. Возможно я чего-то путаю, сейчас проверить возможности нету. Где автор? :)
2 - а их и не вытащишь насколько я знаю :) Сравнивал просто кол-во. Ситуация была такая, поле индикатор значения <пусто> или <заполнено> select = 200 записей, в se11 в содержимое смотрим тоже 200, но если жать кнопу кол-во записей то покажет 205...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 16:53 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
Это SAP BW, таблица нестандартная.

Besa, zsap - почитал ваш спор, это мне подкинуло мыслей, нашел вот такую доку
Help.sap.com
То есть, NULL там может быть, но это не мой случай.

Таблица у меня заполняется начальным значением на самом деле, значит, NULL там не будет вовсе. Тогда получается, что можно сравнивать без проверки на NULL, например, будет моя локальная переменная INITIAL... ну мне запрос и вернет все записи, у которых тоже будет INITIAL значение, я прав? В моем случае это значение SPACE ( тип поля CHAR(1) ).

То есть, WHERE field = <fs>-field.

Спасибо Вам за участие и помощь )


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SQL + nulls  Тема решена
СообщениеДобавлено: Вт, ноя 01 2011, 16:59 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
refeline написал:
Это SAP BW, таблица нестандартная.

Besa, zsap - почитал ваш спор, это мне подкинуло мыслей, нашел вот такую доку
Help.sap.com
То есть, NULL там может быть, но это не мой случай.

Таблица у меня заполняется начальным значением на самом деле, значит, NULL там не будет вовсе. Тогда получается, что можно сравнивать без проверки на NULL, например, будет моя локальная переменная INITIAL... ну мне запрос и вернет все записи, у которых тоже будет INITIAL значение, я прав? В моем случае это значение SPACE ( тип поля CHAR(1) ).

То есть, WHERE field = <fs>-field.

Спасибо Вам за участие и помощь )

Да мы и не спорили :wink:
Имхо, Вы изначально к вопросу не с той стороны зашли. Как и говорил zsap, это не частый случай с NULL, тем более со стандартными таблицами. Я подумал, что у Вас какие-то проблемы возникли, что подтолкнуло Вас "ковырятся" с этим NULL. Поэтому начал описывать ситуацию, когда я столкнулся с проблемами NULL.
В Вашем случае, думаю, заморачиваться не нужно. Во всяком случае, это всегда можно легко проверить.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Вт, ноя 01 2011, 17:35 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
В таком случае условия WHERE field = <fs>-field должно быть достаточно.

Раз уж пошла такая тема, решил проверить как работает условие с NULL. Besa, вы правы, получается TRUE OR NULL в итоге дает TRUE, а не NULL как я предполагал


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Ср, ноя 02 2011, 08:24 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
Besa, да, я стажер, что с меня возьмешь ) Но из той статьи я понял для чего нужно INITIAL значение в базе - для более удобного поиска значений.

zsap Да, так и должно быть, оптимизатор запросов и любого ЯП должен это уметь делать - исключать ненужные операции, в данном случае при условии OR нет смысла проверять вторую часть условия, если первая истина :) Вот если наоборот переставить условия между OR... Тогда должен быть NULL


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Ср, ноя 02 2011, 08:44 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
refeline написал:
zsap Да, так и должно быть, оптимизатор запросов и любого ЯП должен это уметь делать - исключать ненужные операции, в данном случае при условии OR нет смысла проверять вторую часть условия, если первая истина :) Вот если наоборот переставить условия между OR... Тогда должен быть NULL


Не в этом дело, даже если поменять условия местами все равно будет TRUE


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Ср, ноя 02 2011, 09:17 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, сен 30 2011, 11:47
Сообщения: 62
Пол: Мужской
zsap написал:
Не в этом дело, даже если поменять условия местами все равно будет TRUE


Значит, могу предположить, что компилятор статику вычисляет и оптимизирует на стадии генерации исполняемого кода.
А условие прямо так и написано
Code:
NULL = something OR NULL IS NULL

?

А если написать
Code:
NULL = 'const' OR NULL IS NULL

то что будет?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Ср, ноя 02 2011, 12:24 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
refeline написал:
zsap написал:
Не в этом дело, даже если поменять условия местами все равно будет TRUE

Значит, могу предположить, что компилятор статику вычисляет и оптимизирует на стадии генерации исполняемого кода.

Это обычное условие ИЛИ, причем тут оптимизация? ;)

refeline написал:
А условие прямо так и написано
Code:
NULL = something OR NULL IS NULL
?
А если написать
Code:
NULL = 'const' OR NULL IS NULL

то что будет?

Если вот прямо так - то синтаксическая ошибка, ибо в левой части условий должно быть поле

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SQL + nulls
СообщениеДобавлено: Ср, ноя 02 2011, 12:58 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
refeline написал:
А условие прямо так и написано
Code:
NULL = something OR NULL IS NULL


условие такое писал
Code:
WHERE field IS NULL OR field = l_field

Поле field в таблице содержит NULL. Если его перевернуть (WHERE field = l_field OR field IS NULL) - то же самое получается


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB