Zum Inhalt springen
Die Codezentrale
Programmierung, Tipps, Tricks, Snippets, Links (.Net, Java, JavaScript, C++, PHP, Python, SQL, SAP, ABAP, SAPUI5)
Zum Inhalt springen
  • Home
  • Links
    • Kachelmannwetter
    • MrLeehs Blog
    • Deskmodder
    • winfuture.de
    • Tricktresor
    • Python Online Compiler
    • [Raspberry Pi] Wichtige Terminal-Kommandos für Raspian
    • CodeSandbox JS Vanilla
  • Datenschutzerklärung
  • Impressum
Startseite SAP ABAP SQL [ABAP] ADBC (ABAP Database Connectivity) – Klassen für objektorienterten, dynamischen DB-Zugriff

[ABAP] ADBC (ABAP Database Connectivity) – Klassen für objektorienterten, dynamischen DB-Zugriff

admin 23. Januar 2019 23. Januar 2019SQL

Variante 1 (Typdefinition)

* http://zevolving.com/2013/05/abap-database-connectivity-adbc/

* Paket
    - SDB_ADBC
* Demoprogramme
    - ADBC_DEMO
    - ADBC_DEMO_LOBS_ORA
    - ADBC_DEMO_METADATA
    - ADBC_DEMO_PROC_CALLS_HDB
    - ADBC_QUERY
    - ADBC_TEST_CONNECTION

TYPES: BEGIN OF ty_s_result_line,
         col1  TYPE c LENGTH 16,            " VARCHAR2 (16 Char)
         col2  TYPE c LENGTH 16,            " VARCHAR2 (16 Char)
         col3  TYPE p LENGTH 10 DECIMALS 0, " NUMBER(10)
       END OF ty_s_result_line .

TYPES: ty_it_result_data TYPE STANDARD TABLE OF ty_s_result_line WITH DEFAULT KEY.

PARAMETERS: p_con TYPE dbcon-con_name DEFAULT 'MYCON'.
PARAMETERS: p_var1 TYPE string DEFAULT 'ABCDEF'.

START-OF-SELECTION.

  TRY.
* Berechtigungsprüfung
      AUTHORITY-CHECK OBJECT 'S_DBCON' ID 'DBA_DBHOST' FIELD space
                                       ID 'DBA_DBSID'  FIELD p_con
                                       ID 'DBA_DBUSER' FIELD space
                                       ID 'ACTVT'      FIELD '03'.

      IF sy-subrc = 0.
* DB Connection erzeugen
        DATA(o_con) = cl_sql_connection=>get_connection( p_con ).
* SQL-Statement (Syntax ist abh. vom Zielsystem, hier ORACLE)
        DATA(lv_stmt) = |SELECT tab1.col1,| &&
                        |       tab2.col2,| &&
                        |       tab3.col3,| &&
                        |  FROM table1 tab1| &&
                        |  INNER JOIN table2 tab2 ON tab1.id = tab2.id| &&
                        |  INNER JOIN table3 tab3 ON tab1.id = tab3.id| &&
                        |  WHERE col4 = ?|.

* Statement erzeugen
        DATA(o_stmt) = o_con->create_statement( ).
* ggf. Parameter (?) setzen
        o_stmt->set_param( REF #( p_var1 ) ).

* SQL-Statement ausführen (mit Rückgabemenge)
        DATA(o_result) = o_stmt->execute_query( lv_stmt ).

* interne Tabelle für Rückgabedaten setzen
        DATA(it_result) = VALUE ty_it_result_data( ).
        o_result->set_param_table( REF #( it_result ) ).

* Daten in interne Tabelle schreiben
* Parameter upto gibt an, wieviele Datensätze gelesen werden sollen, default = 0 (alle)
        DATA(lv_rows) = o_result->next_package( upto = 0 ).

* Sind Daten vorhanden?
        IF lv_rows > 0.
* Datenausgabe
          cl_demo_output=>display( it_result ).
        ELSE.
          WRITE: / 'Keine Rückgabedaten vorhanden.'.
        ENDIF.

* Resultset schließen
        o_result->close( ).
* DB-Connection schließen
        o_con->close( ).
      ELSE.
        WRITE : / 'Keine Berechtigungen.'.
      ENDIF.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

Variante 2 (generische Typdefinition)

PARAMETERS: p_con TYPE dbcon-con_name DEFAULT 'MYCON'.
PARAMETERS: p_var1 TYPE string DEFAULT 'ABCDEF'.

START-OF-SELECTION.

  TRY.
* Berechtigungsprüfung
      AUTHORITY-CHECK OBJECT 'S_DBCON' ID 'DBA_DBHOST' FIELD space
                                       ID 'DBA_DBSID'  FIELD p_con
                                       ID 'DBA_DBUSER' FIELD space
                                       ID 'ACTVT'      FIELD '03'.

      IF sy-subrc = 0.
* DB Connection erzeugen
        DATA(o_con) = cl_sql_connection=>get_connection( p_con ).
* SQL-Statement (Syntax ist abh. vom Zielsystem, hier ORACLE)
        DATA(lv_stmt) = |SELECT tab1.col1,| &&
                        |       tab2.col2,| &&
                        |       tab3.col3,| &&
                        |  FROM table1 tab1| &&
                        |  INNER JOIN table2 tab2 ON tab1.id = tab2.id| &&
                        |  INNER JOIN table3 tab3 ON tab1.id = tab3.id| &&
                        |  WHERE col4 = ?|.

* Statement erzeugen
        DATA(o_stmt) = o_con->create_statement( ).
* ggf. Parameter setzen
        o_stmt->set_param( REF #( p_var1 ) ).

* SQL-Statement ausführen (mit Rückgabemenge)
        DATA(o_result) = o_stmt->execute_query( lv_stmt ).

* Metadaten
        DATA(o_meta) = o_result->get_metadata( ).
* Strukturdescriptor
        DATA(o_struct) = o_result->get_struct_ref( o_meta ).
        DATA(o_struct_descr) = CAST cl_abap_datadescr( cl_abap_structdescr=>describe_by_data_ref( o_struct ) ).
* Tabellendescriptor erzeugen
        DATA(o_table_descr) = cl_abap_tabledescr=>create( p_line_type = o_struct_descr ).
* Tabellenobjekt anhand des Tabellendeskriptors erstellen
        DATA: o_table TYPE REF TO data.
        CREATE DATA o_table TYPE HANDLE o_table_descr.

* interne Tabelle für Rückgabedaten setzen
        o_result->set_param_table( o_table ).

* Daten in interne Tabelle schreiben
* Parameter upto gibt an, wieviele Datensätze gelesen werden sollen, default = 0 (alle)
        DATA(lv_rows) = o_result->next_package( upto = 0 ).

* Sind Daten vorhanden?
        IF lv_rows > 0.
* Feldsymbol auf das Tabellenobjekt
          FIELD-SYMBOLS <table> TYPE ANY TABLE.
          ASSIGN o_table->* TO <table>.
* Datenausgabe
          cl_demo_output=>display( <table> ).
        ELSE.
          WRITE: / 'Keine Rückgabedaten vorhanden.'.
        ENDIF.

* Resultset schließen
        o_result->close( ).
* DB-Connection schließen
        o_con->close( ).
      ELSE.
        WRITE : / 'Keine Berechtigungen.'.
      ENDIF.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.
  ABAP, ADBC, close, cl_abap_datadescr, cl_abap_structdescr, cl_abap_tabledescr, cl_sql_connection, con_name, create, CREATE DATA, create_statement, DBCON, describe_by_data_ref, execute_query, get_connection, get_metadata, get_struct_ref, next_package, set_param, set_param_table, S_DBCON, TYPE HANDLE. Lesezeichen.
[ABAP] Formatierte Ausgabe eines SQL-Strings
[ABAP] RegEx: HTML-Tags aus String entfernen
  • Kategorien

    aufklappen | zuklappen
  • Neueste Beiträge

    • [SAP] IDOC-Verarbeitung
    • [SAP] Analyse der Performance von ABAP CDS Views
    • [SAP] ABAP CDS Views und Verwendung von Annotations
    • [SAP] Adobe Forms Administration
    • [Raspberry Pi] ZigBee USB-Sticks im Vergleich
    • [Raspberry Pi] ZigBee: zigbee2mqtt einrichten, mosquitto broker installieren
    • [ABAP] Leistungstammsatz anlegen
    • [ABAP] Leistungstammsatz lesen
    • [Raspberry Pi] Betriebsystemfunktionen ausführen
    • [SAP] Übersichten zum ABAP Programming Model
  • Archiv

  • Meta

    • Anmelden
    • Feed der Einträge
    • Kommentare-Feed
    • WordPress.org
  • Related Posts

    • [ABAP] Neue / obsolete Transaktionscodes für S/4 HANA suchen
    • [ABAP] Mandanten und zugeordnete logische Systeme auslesen
    • [ABAP] Transaktionscode zu einer IMG-Aktivität suchen
    • [ABAP] Mandantenübergreifendes Lesen von Daten aus DB-Tabellen
    • [ABAP] Customizing-Objekte zu einem Datenfeld lesen
    • [ABAP] Alle Namespaces im System anzeigen
    • [ABAP] Benutzerparameter zum SAP-User anzeigen
    • [ABAP] OpenSQL: HAVING – Einschränkung einer gruppierten Ergebnismenge
    • [ABAP] SELECT – FROM @itab
    • [ABAP] AUTHORITY-CHECK – Objekte in OpenSQL-WHERE-Condition wandeln
  • Tags

    ABAP (871) Android (18) CLASS (20) cl_abap_list_layout (18) cl_abap_matcher (13) cl_bcs_convert (16) cl_gui_alv_grid (23) cl_gui_container (34) cl_gui_docking_container (23) cl_gui_frontend_services (35) cl_salv_table (52) cntl_simple_event (15) create (28) DataGridView (13) Date (15) default_screen (27) display (14) EWM (16) get_column (13) get_columns (22) gui_download (14) HTML (15) JavaScript (78) JSON (20) MIME (17) NEW (20) OData (28) ole2_object (13) OpenSQL (21) Python (23) Raspberry Pi (50) Raspberry Pi 2 (27) Raspberry Pi 4 (23) Raspian (22) RegEx (17) SAP (347) SAPUI5 (27) SELECT (25) String (33) stringtab (15) suppress_toolbar (19) UTF-8 (14) Value (26) XML (25) xstring (20)
(W) 2022 by codezentrale.de
Powered by Tempera & WordPress.