title: What is the difference between OCCURS 0 and TYPE STANDARD TABLE
body: <p>I am new to ABAP, and I am creating ALV using FM 'REUSE_ALV_FIELDCATALOG_MERGE' and 'REUSE_ALV_GRID_DISPLAY'.</p>
  
  <p>It is working when I defined internal table  <code>IT_MARD</code> using obsolete <strong>occurs 0</strong> definition. But I am getting Exception condition "NO_FIELDCATALOG_AVAILABLE" raised, when I defined internal table using <code>type standard table</code>. Could you  please explain difference between these two definition and why it is not working in the latter case. The following is the code.</p>
  
  <pre><code>REPORT  ztest_fieldcatalog3.
  TYPE-POOLS:slis.
  *Semi Automatic Fieldcatalog Generation.
  *DATA: BEGIN OF IT_MARD OCCURS 0,
  *        MATNR LIKE MARD-MATNR,
  *        WERKS LIKE MARD-WERKS,           ""
  *        LGORT LIKE MARD-LGORT,
  *        PSTAT LIKE MARD-PSTAT,
  *      END OF IT_MARD.
  
  TYPES: BEGIN OF ty_mard,
          matnr type mard-matnr,
          werks type mard-werks,
          lgort type mard-lgort,
          pstat type mard-pstat,
        END OF ty_mard.
  
  DATA: IT_MARD TYPE STANDARD TABLE OF ty_mard.
  
  
  "Use function module create  Fieldcat.
  DATA:l_program TYPE sy-repid VALUE sy-repid.
  
  DATA:i_fieldcat TYPE slis_t_fieldcat_alv.
  
  SELECT matnr
         werks
         lgort
         pstat
    FROM mard
    INTO CORRESPONDING FIELDS OF TABLE it_mard
    UP TO 100 ROWS.
  
  
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = l_program
      i_internal_tabname = 'IT_MARD'
      i_inclname         = l_program
      i_bypassing_buffer = 'X'
    CHANGING
      ct_fieldcat        = i_fieldcat[].
  IF sy-subrc &lt;&gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  
  
  "Call ALV and pass fieldcatalog and data
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = l_program
      it_fieldcat        = i_fieldcat
    TABLES
      t_outtab           = it_mard.
  IF sy-subrc &lt;&gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  </code></pre>