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

Select query for picking data in a dynamic internal table

Former Member
0 Likes
2,703

Dear All,

Please help.

<u>The code is :</u>

p_table1 = itab_final-tabname1. 
        p_field1 = itab_final-fieldname1.          

        SELECT (p_field1) FROM (p_table1) INTO CORRESPONDING FIELDS OF TABLE <dyntable1>.       

It is working fine when the domain is of CHAR

The piece of code is not working where domain is DATS, CURR, DEC, etc.

What shall I do so that it works for other domains also. Please its urgent......

<u>ERROR that came:</u>

An exception occurred. This exception will be dealt with in more detail

below. The exception, assigned to the class 'CX_SY_OPEN_SQL_DB', was not

caught, which

led to a runtime error. The reason for this exception is:

The data read during a SELECT access could not be inserted into the

target field.

Either conversion is not supported for the target field's type or the

target field is too short to accept the value or the data are not in a

form that the target field can accept

1 ACCEPTED SOLUTION
Read only

Pawan_Kesari
Active Contributor
0 Likes
937

Check below code



REPORT zpwtest .

*** Tables
DATA: lt_data TYPE REF TO data.
DATA: lt_fieldcatalog TYPE lvc_t_fcat.

data : p_field type string ,
       p_table type string .

*** Structure
DATA: ls_fieldcatalog TYPE lvc_s_fcat.

*** Data References
DATA: new_line TYPE REF TO data.

*** Field Symbols
FIELD-SYMBOLS: <fs_data> TYPE REF TO data,
               <fs_1> TYPE ANY TABLE,
               <fs_2>,
               <fs_3>.



ls_fieldcatalog-fieldname = 'MANDT'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'CARRID'. "Fieldname
ls_fieldcatalog-inttype = 'C'. "Internal Type C-> Character
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'CONNID'.
ls_fieldcatalog-inttype = 'N'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'FLDATE'.
ls_fieldcatalog-inttype = 'D'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'PRICE'.
ls_fieldcatalog-inttype = 'P'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'CURRENCY'.
ls_fieldcatalog-inttype = 'C'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.


ASSIGN lt_data TO <fs_data>.


CALL METHOD cl_alv_table_create=>create_dynamic_table
     EXPORTING
       it_fieldcatalog = lt_fieldcatalog
     IMPORTING
       ep_table = <fs_data>
     EXCEPTIONS
       generate_subpool_dir_full = 1
       OTHERS = 2
		.
IF sy-subrc <> 0.
ENDIF.



*** So <FS_1> now points to our dynamic internal table.
ASSIGN <fs_data>->* TO <fs_1>.

*** Next step is to create a work area for our dynamic internal table.

CREATE DATA new_line LIKE LINE OF <fs_1>.

*** A field-symbol to access that work area
ASSIGN new_line->*  TO <fs_2>.

<b>


p_field = 'mandt carrid connid fldate price currency' .
p_table = 'sflight' .

*** And to put the data in the internal table

SELECT (p_field)
  FROM (p_table)
  INTO CORRESPONDING FIELDS OF TABLE <fs_1>.

</b>


*** Access contents of internal table
LOOP AT <fs_1> ASSIGNING <fs_2>.

  ASSIGN COMPONENT 5 OF STRUCTURE <fs_2> TO <fs_3>.
  WRITE: / <fs_3>.
ENDLOOP.

Dear All,

Please help.

<u>The code is :</u>

p_table1 = itab_final-tabname1. 
        p_field1 = itab_final-fieldname1.          

        SELECT (p_field1) FROM (p_table1) INTO CORRESPONDING FIELDS OF TABLE <dyntable1>.       

It is working fine when the domain is of CHAR

The piece of code is not working where domain is DATS, CURR, DEC, etc.

What shall I do so that it works for other domains also. Please its urgent......

<u>ERROR that came:</u>

An exception occurred. This exception will be dealt with in more detail

below. The exception, assigned to the class 'CX_SY_OPEN_SQL_DB', was not

caught, which

led to a runtime error. The reason for this exception is:

The data read during a SELECT access could not be inserted into the

target field.

Either conversion is not supported for the target field's type or the

target field is too short to accept the value or the data are not in a

form that the target field can accept

3 REPLIES 3
Read only

Former Member
0 Likes
937

HI Amit

I presume that you are using a field symbol to fetch that data.

You will have to use a conversion exit to convert to the correct data format.

Refer to the code below.

<b>To find the correct Conversion exit for your field name :</b>

  • Select statement to get the domain name of the field for identifying

  • the conversion exit

SELECT domname

INTO

v_domname FROM

dd03l

WHERE tabname = p_table AND fieldname = p_field .

ENDSELECT.

  • Select statement to get the conversion exit name for the field

SELECT convexit

INTO v_convexit

FROM dd01l

WHERE domname = v_domname.

ENDSELECT.

<b>To generate the correct Conversion exit name:</b>

CONCATENATE 'CONVERSION_EXIT_'

v_convexit

'_INPUT'

INTO

v_convexit.

<b>

To call the conversion exit:</b>

PERFORM f_conversion_exit

USING p_table

p_field

v_convexit :

CHANGING Parameter1,

parameter2.

Hope this will help.

Regards,

Ravish Garg

Read only

Former Member
0 Likes
937

It works only with C or N type fields... it doesnt work even with type STRING

Regards

Prax

Read only

Pawan_Kesari
Active Contributor
0 Likes
938

Check below code



REPORT zpwtest .

*** Tables
DATA: lt_data TYPE REF TO data.
DATA: lt_fieldcatalog TYPE lvc_t_fcat.

data : p_field type string ,
       p_table type string .

*** Structure
DATA: ls_fieldcatalog TYPE lvc_s_fcat.

*** Data References
DATA: new_line TYPE REF TO data.

*** Field Symbols
FIELD-SYMBOLS: <fs_data> TYPE REF TO data,
               <fs_1> TYPE ANY TABLE,
               <fs_2>,
               <fs_3>.



ls_fieldcatalog-fieldname = 'MANDT'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'CARRID'. "Fieldname
ls_fieldcatalog-inttype = 'C'. "Internal Type C-> Character
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'CONNID'.
ls_fieldcatalog-inttype = 'N'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'FLDATE'.
ls_fieldcatalog-inttype = 'D'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'PRICE'.
ls_fieldcatalog-inttype = 'P'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.

ls_fieldcatalog-fieldname = 'CURRENCY'.
ls_fieldcatalog-inttype = 'C'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.


ASSIGN lt_data TO <fs_data>.


CALL METHOD cl_alv_table_create=>create_dynamic_table
     EXPORTING
       it_fieldcatalog = lt_fieldcatalog
     IMPORTING
       ep_table = <fs_data>
     EXCEPTIONS
       generate_subpool_dir_full = 1
       OTHERS = 2
		.
IF sy-subrc <> 0.
ENDIF.



*** So <FS_1> now points to our dynamic internal table.
ASSIGN <fs_data>->* TO <fs_1>.

*** Next step is to create a work area for our dynamic internal table.

CREATE DATA new_line LIKE LINE OF <fs_1>.

*** A field-symbol to access that work area
ASSIGN new_line->*  TO <fs_2>.

<b>


p_field = 'mandt carrid connid fldate price currency' .
p_table = 'sflight' .

*** And to put the data in the internal table

SELECT (p_field)
  FROM (p_table)
  INTO CORRESPONDING FIELDS OF TABLE <fs_1>.

</b>


*** Access contents of internal table
LOOP AT <fs_1> ASSIGNING <fs_2>.

  ASSIGN COMPONENT 5 OF STRUCTURE <fs_2> TO <fs_3>.
  WRITE: / <fs_3>.
ENDLOOP.