Dynamiczna lista pól w instrukcji SELECT

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
ODPOWIEDZ
krystek
Posty: 2
Rejestracja: pn kwie 30, 2007 12:01 pm

Dynamiczna lista pól w instrukcji SELECT

Post autor: krystek »

Witam

czy można dynamicznie zbudować zapytanie select?
Chodzi o zestaw pól w instrukcji.
Np lista pól podawana jest jako tabelka.

Z góry dzięki
K
wojtekR
Posty: 4
Rejestracja: pn kwie 30, 2007 11:58 am

Post autor: wojtekR »

Witam
możesz spróbować coś takiego:

tables mara.
DATA: l_columns TYPE TABLE OF string.

APPEND 'MATNR' TO l_columns.
APPEND 'PSTAT' TO l_columns.
SELECT (l_columns)

FROM mara into CORRESPONDING FIELDS OF mara.

WRITE: / mara-matnr .

ENDSELECT.


Czy chodziło Ci o to?
krystek
Posty: 2
Rejestracja: pn kwie 30, 2007 12:01 pm

Post autor: krystek »

Tak właśnie o to mi chodziło.

Wielkie dzięki
K
wojtekR
Posty: 4
Rejestracja: pn kwie 30, 2007 11:58 am

Post autor: wojtekR »

Jeszcze jedno.

Dynamicznie w zmiennej możesz przekazać też nazwę tabeli.

Np:
DATA zmianna TYPE string.
zmienna = 'MARA'.

SELECT .... FROM (zmienna).
pzdr
W
abaper
Posty: 99
Rejestracja: sob kwie 28, 2007 8:34 am
Been thanked: 1 time

Post autor: abaper »

Hej

napisałem kiedyś taki programik który pobiera listę pól tabeli.
Myślę ,że powinien on zastąpić w tych kodach moment podstawiania
pól do dynamicznej listy
report zabaper .

* Data

type-pools: abap.

data : it_field type abap_compdescr_tab,
wa_field type abap_compdescr,
ref_field type ref to cl_abap_structdescr.


* Selection screen
parameters: pa_tabn type DD02D-DBTABNAME .

START-OF-SELECTION.

ref_field ?= cl_abap_typedescr=>describe_by_name( pa_tabn ).
it_field[] = ref_field->components[].

* display data

loop at it_field into wa_field.
write:/ wa_field-name.
endloop.


pozdrawiam
abaper
abaper
Posty: 99
Rejestracja: sob kwie 28, 2007 8:34 am
Been thanked: 1 time

Post autor: abaper »

Hej

kolejna wariacja "dynamiki"

program to coś ala Twoje własne se16
może się przydać :)

REPORT zabaper2 .

DATA: d_ref TYPE REF TO data,
d_ref2 TYPE REF TO data ,
i_alv_cat TYPE TABLE OF lvc_s_fcat,
ls_alv_cat LIKE LINE OF i_alv_cat.

PARAMETERS: pa_tabn TYPE dcobjdef-name OBLIGATORY .

DATA: BEGIN OF itab OCCURS 0.
INCLUDE STRUCTURE dntab.
DATA: END OF itab.

FIELD-SYMBOLS : <f_fs> TYPE table,

<f_fs1> TYPE table,
<f_fs2> TYPE ANY,
<f_fs3> TYPE table.


REFRESH itab.
CALL FUNCTION 'NAMETAB_GET'
EXPORTING
langu = sy-langu
tabname = pa_tabn
TABLES
nametab = itab
EXCEPTIONS
no_texts_found = 1.

LOOP AT itab .
ls_alv_cat-fieldname = itab-fieldname.
ls_alv_cat-ref_table = pa_tabn.
ls_alv_cat-ref_field = itab-fieldname.
APPEND ls_alv_cat TO i_alv_cat.
ENDLOOP.


* internal table build
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = i_alv_cat
IMPORTING
ep_table = d_ref.
ASSIGN d_ref->* TO <f_fs>.


SELECT * FROM (pa_tabn) INTO CORRESPONDING FIELDS OF TABLE <f_fs>.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_structure_name = pa_tabn
TABLES
t_outtab = <f_fs>
EXCEPTIONS
program_error = 1

OTHERS = 2.
ODPOWIEDZ