Текущее время: Сб, июл 19 2025, 09:14

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: is null в запросе
СообщениеДобавлено: Пт, июн 30 2006, 13:23 
Начинающий
Начинающий

Зарегистрирован:
Вт, июн 13 2006, 08:47
Сообщения: 9
Как реализовать следующее условие в запросе

Code:
select *
  from some_tab
where tab_column = my_variable
           or
           my_variable is null.


В таком виде ругается, что не знает такую переменную (видимо первым всегда должен идти столбец, хотя в стандарте sql это вроде всего лишь рекомендация).
Можно конечно вынести проверку переменной из запроса и сделать вместо одного запроса два, но как-то некрасиво это.
Наверняка есть простое решение.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 30 2006, 13:33 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
SQL это одно, а Open SQL - совсем немного другое :) привыкай

И вообще, если раньше писал на sql - теперь придется отучаться строить какую то логику внутри запроса. Все снаружи средствами абапа

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 30 2006, 13:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Open SQL далеко не соответствует стандарту, в том числе, в левой части оператора сравнения в where всегда должно быть имя колонки одной из запрашиваемых таблиц.
Правильно ли я понял, что если my_variable пуста, то вам нужно все содержимое таблицы? Если так, то это можно сделать, например, так:
Code:
RANGES:
  r_col FOR some_tab-tab_column.

IF NOT my_variable IS INITIAL.
  r_col-sign = 'I'.
  r_col-option = 'EQ'.
  r_col-low = my_variable.
  APPEND r_col.
ENDIF.

select *
  from some_tab
where tab_column IN r_col.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Пт, июн 30 2006, 15:17 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, апр 07 2006, 22:15
Сообщения: 184
Цитата:
если my_variable пуста, то вам нужно все содержимое таблицы


Code:
select *
  from some_tab
where tab_column = my_variable
           or
           my_variable is null.


Тогда должно быть and по идее.

Вообще не видел я таких стандартов по которым после where присваивание происходит:) дайте rtfm


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Пт, июн 30 2006, 15:21 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Абапер написал(а):
Code:
select *
  from some_tab
where tab_column = my_variable
           or
           my_variable is null.


Тогда должно быть and по идее.

если поставить and - выберет только записи, где tab_column is null

Абапер написал(а):
Вообще не видел я таких стандартов по которым после where присваивание происходит:) дайте rtfm

какое такое присваивание? :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Пт, июн 30 2006, 15:50 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, апр 07 2006, 22:15
Сообщения: 184
ArmAnn написал:
Абапер написал(а):
Code:
select *
  from some_tab
where tab_column = my_variable
           or
           my_variable is null.


Тогда должно быть and по идее.

если поставить and - выберет только записи, где tab_column is null

Абапер написал(а):
Вообще не видел я таких стандартов по которым после where присваивание происходит:) дайте rtfm

какое такое присваивание? :)


Тэкс...
Я вижу некий эдакий Си, когда в одной фразе мы говорим, что my_variable=NULL (присваивание, ибо столбца такого нет) и столбец=my_variable (сравнение). Поэтому хочется увидеть тот стандарт, который разрешает такие махинации.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Пт, июн 30 2006, 16:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Абапер написал(а):
Я вижу некий эдакий Си, когда в одной фразе мы говорим, что my_variable=NULL (присваивание, ибо столбца такого нет) и столбец=my_variable (сравнение).

В стандарте SQL-92 в условиях WHERE не запрещено (если я не ошибаюсь :roll:) сравнение внешних переменных со значениями. Так что никакого присваивания тут в виду не имеется, думаю. Просто автор этой темы, видимо, надеялся, что SAP Open SQL соответствует стандарту.

_________________
С уважением, Сергей Королев


Последний раз редактировалось Сергей Королев Пт, июн 30 2006, 16:20, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Пт, июн 30 2006, 16:05 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Абапер написал(а):
Тэкс...
Я вижу некий эдакий Си, когда в одной фразе мы говорим, что my_variable=NULL (присваивание, ибо столбца такого нет) и столбец=my_variable (сравнение). Поэтому хочется увидеть тот стандарт, который разрешает такие махинации.


Просто в запросе дополнительно проверяется еще и переменная. Насчет стандарта не уверен, но transact sql (ms) такие фокусы позволяет, думаю и ораклиный сиквел тоже. На самом деле достаточно удобно, когда логика приложения строится на стороне сервера БД в виде хранимых процедур, да и просто удобней чем дополнительный код

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 30 2006, 16:52 
Ассистент
Ассистент

Зарегистрирован:
Пн, сен 26 2005, 11:53
Сообщения: 46
Да, и в T-SQL и в PL/SQL такая конструкция возможна (и пользуется спросом :)). Но в SAP-е, к сожалению, придется использовать другие приемы. В зависимости от задачи.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 06:23 
Начинающий
Начинающий

Зарегистрирован:
Вт, июн 13 2006, 08:47
Сообщения: 9
Спасибо Сергею Королеву за решение проблемы.
Думаю, вопрос можно считать закрытым.

PS. Весь вечер пятницы вертелась назойливая мысль "а как же раньше удавалось эти грабли обходить?". Сегодня с утра пересмотрел постановку и избавился от проверки на null. Может ABAP так задуман чтоб было трудно реализовать "не совсем корректные" задачи? :wink:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Чт, июл 06 2006, 10:36 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, апр 07 2006, 22:15
Сообщения: 184
ArmAnn написал:
Просто в запросе дополнительно проверяется еще и переменная.

теперь понял :)

Цитата:
Может ABAP так задуман чтоб было трудно реализовать "не совсем корректные" задачи?


Мне кажется это из за того, что запрос напрямую передается непосредственно в БД, за которую SAP ответственности не несет


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Чт, июл 06 2006, 11:10 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Абапер написал(а):
Мне кажется это из за того, что запрос напрямую передается непосредственно в БД, за которую SAP ответственности не несет


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

EXEC SQL
.............
ENDEXEC.

В данном случае используется Native SQL. И как раз таки идет обращение напрямую к БД, минуя аппликэйшн сервера.
Кстати, с помощью данной конструкции можно и с хранимками работать и таблицы дропать и многое другое.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Чт, июл 06 2006, 11:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Пономарев Артем написал:
EXEC SQL
.............
ENDEXEC.

В данном случае используется Native SQL. И как раз таки идет обращение напрямую к БД, минуя аппликэйшн сервера.
Кстати, с помощью данной конструкции можно и с хранимками работать и таблицы дропать и многое другое.

Точно! Простой способ поставить систему на колени :)

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 06 2006, 12:34 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, фев 17 2006, 07:38
Сообщения: 99
Можно сделать так:

Code:
data s type string.

if my_variable is initial.
  s = ''.
else.
  s = 'tab_column = my_variable'.
endif.
select *
  from some_tab
where (s).
...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: is null в запросе
СообщениеДобавлено: Чт, июл 06 2006, 13:03 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Сергей Королев написал:
Пономарев Артем написал:
EXEC SQL
.............
ENDEXEC.

В данном случае используется Native SQL. И как раз таки идет обращение напрямую к БД, минуя аппликэйшн сервера.
Кстати, с помощью данной конструкции можно и с хранимками работать и таблицы дропать и многое другое.

Точно! Простой способ поставить систему на колени :)


и доказать, что на каждую вражеску систему найдется своя отвертка ;)

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


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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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