Текущее время: Сб, июн 21 2025, 23:45

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


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

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


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

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