Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Dynamic update statement

Former Member
0 Likes
6,931

Hello,

How do I write a dynamic UPDATE statement that I need to look like this:

DATA: TABLE_NAME(10),

COL_NAME1(10),

COL_NAME2(10),

COL_NAME3(10).

table_name = 'TABLEX'

COL_NAME1 = 'COL1X'.

COL_NAME2 = 'COL2X'.

COL_NAME3 = 'COL3'X.

UPDATE table_name SET col_name1 = VAR1 col_name2 = VAR2 col_name3 = VAR3.

table_name = 'TABLEY'

COL_NAME1 = 'COL1Y'.

COL_NAME2 = 'COL2Y'.

COL_NAME3 = 'COL3Y'.

UPDATE table_name SET col_name1 = VAR1 col_name2 = VAR2 col_name3 = VAR3.

Thank you.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
3,040

Hi

if It can't do a dynamic updating for option SET, u need to create a work-area in order to update the table:

DATA: TABLE_NAME(10),
           COL_NAME1(10),
           COL_NAME2(10),
           COL_NAME3(10).

DATA: T_WHERE(100) OCCURS 0 WITH HEADER LINE.

DATA: DYN_WA TYPE REF TO DATA.

FIELD-SYMBOLS: <FS_WA> TYPE ANY,
                            <FS_COL> TYPE ANY.


able_name = 'TABLEY'
COL_NAME1 = 'COL1Y'.
COL_NAME2 = 'COL2Y'.
COL_NAME3 = 'COL3Y'.


CREATE DATA DYN_WA TYPE (TABLE_NAME).
ASSIGN DYN_WA->* TO <FS_WA>.


SELECT * FROM (TABLE_NAME) INTO <FS_WA> WHERE (T_WHERE).
  
   PERFORM ASSIGN_NEW_VALUE USING: COL_NAM1 VAR1,
                                                                    COL_NAM2 VAR2,
                                                                    COL_NAM2 VAR3.
   UPDATE (TABLE_NAME) FROM <FS_WA>.
ENDSELECT.

FORM ASSIGN_NEW_VALUE USING PCOL PVAR.
   
   ASSIGN COMPONENT PCOL OF STRUCTURE <FS_WA> TO <FS_FIELD>.
   IF SY-SUBRC = 0.
     <FS_FIELD> = PVAR.
   ENDIF.
ENDFORM.

If you're using the release 6.00 u can do a dynamic updating with SET option:

DATA: TABLE_NAME(10),
           COL_NAME1(10),
           COL_NAME2(10),
           COL_NAME3(10).

DATA: T_WHERE(100) OCCURS 0 WITH HEADER LINE.
DATA: T_SET(100) OCCURS 0 WITH HEADER LINE.

UPDATE (TABLE_NAME) SET (T_SET) WHERE (T_WHERE).

Anyway see the help for UPDATE statament

Max

4 REPLIES 4
Read only

Former Member
0 Likes
3,040

Hi,

Use field symbol and pass the table name to the field symbol and use it instead of table name.

Regards

Bikas

Read only

Former Member
0 Likes
3,040

hi

just chk out this thread

hope this helps

regards

Aakash Banga

Read only

Former Member
0 Likes
3,041

Hi

if It can't do a dynamic updating for option SET, u need to create a work-area in order to update the table:

DATA: TABLE_NAME(10),
           COL_NAME1(10),
           COL_NAME2(10),
           COL_NAME3(10).

DATA: T_WHERE(100) OCCURS 0 WITH HEADER LINE.

DATA: DYN_WA TYPE REF TO DATA.

FIELD-SYMBOLS: <FS_WA> TYPE ANY,
                            <FS_COL> TYPE ANY.


able_name = 'TABLEY'
COL_NAME1 = 'COL1Y'.
COL_NAME2 = 'COL2Y'.
COL_NAME3 = 'COL3Y'.


CREATE DATA DYN_WA TYPE (TABLE_NAME).
ASSIGN DYN_WA->* TO <FS_WA>.


SELECT * FROM (TABLE_NAME) INTO <FS_WA> WHERE (T_WHERE).
  
   PERFORM ASSIGN_NEW_VALUE USING: COL_NAM1 VAR1,
                                                                    COL_NAM2 VAR2,
                                                                    COL_NAM2 VAR3.
   UPDATE (TABLE_NAME) FROM <FS_WA>.
ENDSELECT.

FORM ASSIGN_NEW_VALUE USING PCOL PVAR.
   
   ASSIGN COMPONENT PCOL OF STRUCTURE <FS_WA> TO <FS_FIELD>.
   IF SY-SUBRC = 0.
     <FS_FIELD> = PVAR.
   ENDIF.
ENDFORM.

If you're using the release 6.00 u can do a dynamic updating with SET option:

DATA: TABLE_NAME(10),
           COL_NAME1(10),
           COL_NAME2(10),
           COL_NAME3(10).

DATA: T_WHERE(100) OCCURS 0 WITH HEADER LINE.
DATA: T_SET(100) OCCURS 0 WITH HEADER LINE.

UPDATE (TABLE_NAME) SET (T_SET) WHERE (T_WHERE).

Anyway see the help for UPDATE statament

Max

Read only

RaymondGiuseppi
Active Contributor
0 Likes
3,040

- removed myself -