Posted: Mon Apr 05, 2010 10:23 am Post subject: Как динамически передать дату в запрос?
Сдаюсь! Программирвоала до abap'a на Delphi под SQL Server и Oracle. Знаю T-SQL и PL/SQL, но в abap (как уже поняла) свой SQL, пока сложно поддающийся дрессировке с моей стороны. Помогите, пожалуйста, решить проблему.
Строю динамический запрос. Строка where формируется динамически.
В идеале вопроса 2:
1. Как динамически передать дату в запрос?
2. Почему не получается соединить таблицы с помощью left join? Только join...
И так:
Требуется в строку where подставить уже заранее определенное значение даты. Подставляю и получаю динамическую ошибку: поле "20100301" не найдено ни в одной из таблиц БД ... и т.д.
Как быть?
Code:
DATA: l_SQLStr(256) TYPE C,
tbl_SQLWhere LIKE TABLE OF l_SQLStr.
...
Текст запроса до отладки:
Code:
select *
into corresponding fields of gs_data_tmp
from zdf_card_018004
join /dfs/apprdata
on /dfs/apprdata~dokar = zdf_card_018004~dokar
and /dfs/apprdata~doknr = zdf_card_018004~doknr
and /dfs/apprdata~dokvr = zdf_card_018004~dokvr
and /dfs/apprdata~doktl = zdf_card_018004~doktl
and /dfs/apprdata~aprrole = '9'
where (tbl_SQLWhere).
При отладке получаю значение tbl_SQLWhere:
1. zdf_card_018004~regdate in so_per and zdf_card_018004~delete_flag <> 'X'
2. and ( ( /dfs/apprdata~proc_date is NULL ) or ( /dfs/apprdata~proc_date is not NULL and 20100301 < /dfs/apprdata~proc_date ) )
3. and /dfs/apprdata~aprst in ('J','I','P')
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Mon Apr 05, 2010 11:05 am Post subject:
1.Для отладки избавьтесь от динамического Where:
Code:
select *
into corresponding fields of gs_data_tmp
from zdf_card_018004
join /dfs/apprdata
on /dfs/apprdata~dokar = zdf_card_018004~dokar
and /dfs/apprdata~doknr = zdf_card_018004~doknr
and /dfs/apprdata~dokvr = zdf_card_018004~dokvr
and /dfs/apprdata~doktl = zdf_card_018004~doktl
and /dfs/apprdata~aprrole = '9'
where zdf_card_018004~regdate in so_per
and zdf_card_018004~delete_flag <> 'X'
and ( ( /dfs/apprdata~proc_date is NULL )
or ( /dfs/apprdata~proc_date is not NULL
and /dfs/apprdata~proc_date > '20100301' ) )
and /dfs/apprdata~aprst in ('J','I','P')
Если в транзакции SE12 для поля proc_date таблицы /dfs/apprdata в 3-й колонке (нач. значения) стоит галочка, то IS NULL и IS NOT NULL не нужны.
Code:
( /dfs/apprdata~proc_date = SPACE )
or ( /dfs/apprdata~proc_date > '20100301' )
Более того, это условие можно указать с помощью RANGE:
Code:
RANGES: r_proc_date FOR /dfs/apprdata-proc_date .
START-OF-SELECTION.
CLEAR r_proc_date.
r_proc_date-sign = 'I'.
r_proc_date-option = 'EQ'.
APPEND r_proc_date.
r_proc_date-option = 'GT'.
r_proc_date-low = '20100301'.
APPEND r_proc_date.
...
AND /dfs/apprdata~proc_date IN r_proc_date
...
2.Для left join в условии соединения должны быть указаны только операторы равенства. _________________ С уважением,
Удав.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.