Текущее время: Вс, июл 27 2025, 22:12

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 09:22 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Здравствуйте господа.

Подскажите пожалуйста. Возможно сделать выборку с дин. условием WHERE, где есть подзапрос ( IN ( SELECT ...) ) или EXISTS.
Если нет, тогда как аналогично?
Code:
...
      CONCATENATE 'KNA1~KTOKD = P_KTOKD'
                  'AND LFA1~KTOKK = P_KTOKK'
                  'AND KNA1~LIFNR <> '''''
                  'AND LFA1~KUNNR <> '''''
                  'AND EXISTS ( SELECT * FROM KNB1 WHERE KUNNR = KNA1~KUNNR AND XVERR <> '''' )'
                  'AND EXISTS ( SELECT * FROM LFA1 WHERE LIFNR = LFA1~LIFNR AND XVERR <> '''' )'
      INTO p_cond_syntax SEPARATED BY space.
      SELECT ...
            WHERE (p_cond_syntax).

Code:
      APPEND 'KNA1~KTOKD = P_KTOKD' TO p_cond_tab.
      APPEND 'AND KNA1~KUNNR IN' TO p_cond_tab.
      APPEND '( SELECT KUNNR FROM KNB1 WHERE XVERR <> '''' )' TO p_cond_tab.
      SELECT ...
            WHERE (p_cond_tab).

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 09:32 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Здравствуйте.
На чем основано предположение, что нельзя?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 09:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Вот код. Почему-то ошибка...
Code:
  PERFORM cond_syntax TABLES cond_tab USING cond_syntax.

  REFRESH gt_out.
  TRY.
      SELECT kna1~stcd1
             kna1~kunnr
             kna1~name1
             lfa1~lifnr
             lfa1~name1
        INTO TABLE gt_out
        FROM kna1
        INNER JOIN lfa1 ON lfa1~stcd1 = kna1~stcd1
        WHERE (cond_syntax)
        .
    CATCH cx_sy_dynamic_osql_error.
      MESSAGE `Ошибка условий!` TYPE 'I'.
      EXIT.
  ENDTRY.
...

FORM cond_syntax TABLES p_cond_tab STRUCTURE rsdswhere
                 USING  p_cond_syntax TYPE string.
  CASE p_linkd.
    WHEN 'X'.
      CONCATENATE 'KNA1~KTOKD = P_KTOKD'
                  'AND LFA1~KTOKK = P_KTOKK'
                  'AND KNA1~LIFNR <> '''''
                  'AND LFA1~KUNNR <> '''''
                  'AND EXISTS ( SELECT * FROM KNB1 WHERE KUNNR = KNA1~KUNNR AND XVERR <> '''' )'
                  'AND EXISTS ( SELECT * FROM LFA1 WHERE LIFNR = LFA1~LIFNR AND XVERR <> '''' )'
      INTO p_cond_syntax SEPARATED BY space.
    WHEN ''.
....
  ENDCASE.
ENDFORM.                    " COND_SYNTAX


_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 10:01 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
An Open SQL clause was specified dynamically. The contained field name
"EXISTS" does not exist in any of the database tables from the FROM clause.

Похоже и правда проблема есть. А зачем в данном примере динамическое условие where?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 10:09 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Просто есть два разных случая:
1. Найти связанных дебиторов и кредиторов
2. Найти не связанных дебиторов и кредиторов
Не хотелось делать две разные выборки, когда можно динамически сформировать.
А как насчет "IN SELECT"? Я вроде поэкспериментировал, такая же беда...

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 10:17 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
__Gennady написал(а):
На чем основано предположение, что нельзя?


Цитата:
WHERE - (cond_syntax)
.. It has been possible since SAP Web AS 6.40 to specify all logical expressions dynamically, with the exception of the evaluation of a subquery.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке  Тема решена
СообщениеДобавлено: Пт, дек 24 2010, 11:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
FeBO-Sh написал:
Не хотелось делать две разные выборки, когда можно динамически сформировать.

Лучше уж 2 выборки, чем разбираться с динамическим формированием where.
И код анализировать проще, и затрат на динамический разбор SQL не будет.
Кроме этого, строк кода будет больше всего на 4 ;)

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие WHERE в выборке
СообщениеДобавлено: Пт, дек 24 2010, 11:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
)) Ладно всем спасибо за советы. Видимо придется делать через две выборки.

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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