Коллеги, подскажите пожалуйста.
Пишу программу по выгрузке любых таблиц на desktop. Столкнулся с проблемой больших таблиц - решил выгружать их частями.
Следующий код падает на втором куске с известной ошибкой DBIF_RSQL_INVALID_CURSOR
Code:
SELECT * FROM (tabnam) APPENDING TABLE <p> PACKAGE SIZE maxlines.
IF <p> IS NOT INITIAL. " Есть что выгружать
CONCATENATE filen ' ^ ' partnum INTO filen_part.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = filen_part
filetype = filtyp
codepage = '1504'
TABLES
data_tab = <p>
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
WRITE:/ 'Выгрузка прошла успешно в файл ',filen_part.
ELSE.
WRITE:/ 'Ошибка выгрузки'.
ENDIF.
CLEAR <p>. REFRESH <p>.
ADD 1 TO partnum.
ENDSELECT.
Но и использование OPEN CURSOR WITH HOLD приводит к той же ошибке:
Code:
DATA w_dbcur1 TYPE cursor.
OPEN CURSOR WITH HOLD w_dbcur1 FOR SELECT * FROM (tabnam).
WHILE sy-subrc = 0.
FETCH NEXT CURSOR w_dbcur1 INTO TABLE <p> PACKAGE SIZE maxlines.
IF sy-subrc = 0.
CONCATENATE filen ' ^ ' partnum INTO filen_part.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = filen_part
filetype = filtyp
codepage = '1504'
TABLES
data_tab = <p>
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
WRITE:/ 'Выгрузка прошла успешно в файл ',filen_part.
ELSE.
WRITE:/ 'Ошибка выгрузки'.
ENDIF.
CLEAR <p>. REFRESH <p>.
ADD 1 TO partnum.
ENDIF.
ENDWHILE.
CLOSE CURSOR w_dbcur1.
Посоветуйте пож, как можно решить поставленную задачу.
В худшем случае можно делать выгрузку не на десктоп, а на сервер, но поможет ли это избежать дампов?
Спасибо.
P.S. Добавлю, что выгружаемые таблицы могут иметь размер > 20Гб