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

Часовой пояс: 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 часа


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

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


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

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