[ABAP] ABAP Database Connectivity (ADBC) – CASE-insensitive Suche auf der Datenbank

* ab Version 7.51 auch im OpenSQL verfügbar (LOWER, UPPER)
* https://help.sap.com/doc/abapdocu_751_index_htm/7.51/de-DE/abenopen_sql_functions.htm
* https://archive.sap.com/discussions/thread/3470652

DATA: o_salv TYPE REF TO cl_salv_table.        " Anzeigeobjekt SALV Grid
DATA: it_cols TYPE adbc_column_tab.            " Selektierte Spalten
DATA: it_makt TYPE STANDARD TABLE OF makt.     " Ausgabetabelle

START-OF-SELECTION.

* zu verarbeitende Spalten
  it_cols = VALUE #( ( 'MATNR' )
                     ( 'SPRAS' )
                     ( 'MAKTX' )
                     ( 'MAKTG' ) ).

* Spaltennnamen durch Komma trennen
  DATA(cols) = to_lower( concat_lines_of( table = it_cols sep = ',' ) ).

* Spaltennamen und Parameter in SQL einfügen, alle Bezeichner suchen, die mit 'sch*' beginnen
  DATA(lv_query) = |SELECT { cols } FROM makt WHERE spras = 'D' AND upper(maktx) LIKE 'SCH%'|.

  TRY.
* SQL-Connection öffnen
      DATA(o_sql_connection) = NEW cl_sql_connection( ).

      IF abap_true <> o_sql_connection->is_closed( ).
* SQL-Statement erzeugen
        DATA(o_sql) = NEW cl_sql_statement( con_ref = o_sql_connection ).

* Query ausführen
        DATA(o_result) = o_sql->execute_query( lv_query ).

* Ergebnismenge soll in interne Tabelle it_makt und nur die Spalten, welche in it_cols stehen
        o_result->set_param_table( itab_ref             = REF #( it_makt )
                                   corresponding_fields = it_cols ).

* Ergebnismenge in interne Tabelle lesen
* cnt enthält die Anzahl der gelesenen Datensätze
        DATA(cnt) = o_result->next_package( ).
* Ergebnismenge schließen
        o_result->close( ).
* SQL-Connection schließen
        o_sql_connection->close( ).

        IF cnt > 0.
          cl_salv_table=>factory( IMPORTING
                                    r_salv_table = o_salv
                                  CHANGING
                                    t_table = it_makt ).

          o_salv->get_display_settings( )->set_list_header( |DBMS: { o_sql_connection->get_dbms( ) }| ).
          o_salv->get_functions( )->set_all( abap_true ).
          o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
          o_salv->display( ).
        ENDIF.
      ENDIF.
    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.