Can you create an internal table dynamically? (at run time) 
Yes , you can create a Dynamic Internal table .Just chek out this program . 
  type-pools : abap. 
  field-symbols: <dyn_table> type standard table, 
               <dyn_wa>, 
               <dyn_field>. 
  data: dy_table type ref to data, 
      dy_line  type ref to data, 
      xfc type lvc_s_fcat, 
      ifc type lvc_t_fcat. 
  selection-screen begin of block b1 with frame. 
parameters: p_table(30) type c default 'T001'. 
selection-screen end of block b1. 
  start-of-selection. 
    perform get_structure. 
  perform create_dynamic_itab.      **********Creates a dyanamic internal table********** 
  perform get_data. 
  perform write_out. 
  form get_structure. 
  data : idetails type abap_compdescr_tab, 
       xdetails type abap_compdescr. 
  data : ref_table_des type ref to cl_abap_structdescr. 
  * Get the structure of the table. 
  ref_table_des ?=  
      cl_abap_typedescr=>describe_by_name( p_table ). 
  idetails[] = ref_table_des->components[]. 
    loop at idetails into xdetails. 
    clear xfc. 
    xfc-fieldname = xdetails-name . 
    xfc-datatype = xdetails-type_kind. 
    xfc-inttype = xdetails-type_kind. 
    xfc-intlen = xdetails-length. 
    xfc-decimals = xdetails-decimals. 
    append xfc to ifc. 
  endloop. 
  endform. 
  form create_dynamic_itab. 
  * Create dynamic internal table and assign to FS 
  call method cl_alv_table_create=>create_dynamic_table 
               exporting 
                  it_fieldcatalog = ifc 
               importing 
                  ep_table        = dy_table. 
    assign dy_table->* to <dyn_table>. 
  * Create dynamic work area and assign to FS 
  create data dy_line like line of <dyn_table>. 
  assign dy_line->* to <dyn_wa>. 
  endform. 
  form get_data. 
  * Select Data from table. 
  select * into table <dyn_table> 
             from (p_table). 
  endform. 
   Write out data from table. 
  loop at <dyn_table> into <dyn_wa>. 
    do. 
      assign component  sy-index   
         of structure <dyn_wa> to <dyn_field>. 
      if sy-subrc  0. 
        exit. 
      endif. 
      if sy-index = 1. 
        write:/ <dyn_field>. 
      else. 
        write: <dyn_field>. 
      endif. 
    enddo. 
  endloop. 
--------------------------------------------------------------------------------
REPORT ZCLUST1 . 
* 
* Example: how to create a dynamic internal table 
*  
* The dynamic internal table stucture 
DATA: BEGIN OF STRUCT OCCURS 10, 
    FILDNAME(8) TYPE C, 
    ABPTYPE TYPE C, 
    LENGTH TYPE I, 
END OF STRUCT. 
* The dynamic program source table 
DATA: BEGIN OF INCTABL OCCURS 10, 
    LINE(72), 
END OF INCTABL. 
DATA: LNG TYPE I, TYPESRTING(6). 
* Sample dynamic internal table stucture 
STRUCT-FILDNAME = 'field1'. STRUCT-ABPTYPE = 'c'. STRUCT-LENGTH = '6'. 
APPEND STRUCT. CLEAR STRUCT. 
STRUCT-FILDNAME = 'field2'. STRUCT-ABPTYPE = 'd'. 
APPEND STRUCT. CLEAR STRUCT. 
STRUCT-FILDNAME = 'field3'. STRUCT-ABPTYPE = 'i'. 
APPEND STRUCT. CLEAR STRUCT. 
* Create the dynamic internal table definition in the dyn. program 
INCTABL-LINE = 'program zdynpro.'. APPEND INCTABL. 
INCTABL-LINE = 'data: begin of dyntab occurs 10,'. APPEND INCTABL. 
LOOP AT STRUCT. 
  INCTABL-LINE = STRUCT-FILDNAME. 
  LNG = STRLEN( STRUCT-FILDNAME ). 
  IF NOT STRUCT-LENGTH IS INITIAL . 
      TYPESRTING(1) = '('. 
      TYPESRTING+1 = STRUCT-LENGTH. 
      TYPESRTING+5 = ')'. 
      CONDENSE TYPESRTING NO-GAPS. 
      INCTABL-LINE+LNG = TYPESRTING. 
  ENDIF. 
  INCTABL-LINE+15 = 'type '. 
  INCTABL-LINE+21 = STRUCT-ABPTYPE. 
  INCTABL-LINE+22 = ','. 
  APPEND INCTABL. 
ENDLOOP. 
INCTABL-LINE = 'end of dyntab. '. 
APPEND INCTABL. 
* Create the code processes the dynamic internal table 
INCTABL-LINE = ' '. APPEND INCTABL. 
INCTABL-LINE = 'dyntab-field1 = ''aaaaaa''.'. APPEND INCTABL. 
INCTABL-LINE = 'dyntab-field1 = ''19970814''.'. APPEND INCTABL. 
INCTABL-LINE = 'dyntab-field1 = 1.'. APPEND INCTABL. 
INCTABL-LINE = 'append dyntab.'. APPEND INCTABL. 
INCTABL-LINE = ' '. APPEND INCTABL. 
INCTABL-LINE = 'loop at dyntab.'. APPEND INCTABL. 
INCTABL-LINE = 'write: / dyntab.'. APPEND INCTABL. 
INCTABL-LINE = 'endloop.'. APPEND INCTABL. 
* Create and run the dynamic program 
INSERT REPORT 'zdynpro'(001) FROM INCTABL. 
SUBMIT ZDYNPRO. 
--------------------------------------------------------------------------------
or Just try out this simpler dynamic internal tables 
DATA: itab TYPE STANDARD TABLE OF spfli, 
              wa LIKE LINE OF itab. 
DATA: line(72) TYPE c, 
            list LIKE TABLE OF line(72). 
START-OF-SELECTION. 
*line = ' CITYFROM CITYTO '. 
  line = ' AIRPTO '. 
 APPEND line TO list. 
SELECT DISTINCT (list) 
       INTO CORRESPONDING FIELDS OF TABLE itab 
            FROM spfli. 
IF sy-subrc EQ 0. 
  LOOP AT itab INTO wa. 
*     WRITE: / wa-cityfrom, wa-cityto. 
       WRITE :/ wa-airpto. 
  ENDLOOP. 
ENDIF.