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 Beiträge getaggt mit "describe_by_data_ref"

Schlagwort: describe_by_data_ref

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

Variante 1 (Typdefinition)

* 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.

Links

  • http://zevolving.com/2013/05/abap-database-connectivity-adbc/
admin 23. Januar 2019 12. Juni 2024ADBC 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
  • Kategorien

    aufklappen | zuklappen
  • Neueste Beiträge

    • [ABAP] Workflow: Workitems zu Objekt
    • [RAP] Excel-Upload in Fiori-Apps
    • [ABAP] OLE2-Objekt ‚SAPINFO‘ aufrufen
    • [ABAP] Excel-Daten mit XCO API (xco_cp_xlsx) lesen
    • [ABAP] Daten einer internen Tabelle als Excel-Datei speichern (xco_cp_xlsx)
    • [ABAP] JSON -> ABAP (xco_cp_json)
    • [ABAP] ABAP -> JSON (xco_cp_json)
    • [ABAP] String nach SYMSG-Struktur konvertieren
    • [ABAP] Unix-Timestamp erzeugen
    • [ABAP] SALV-Grid: Eventhandler für Doppelklick auf eine Zelle (double_click)
  • Archiv

  • Meta

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

    • [ABAP] RTTS: Interne Tabelle dynamisch erzeugen
    • [ABAP] ABAP Database Connectivity (ADBC) – CASE-insensitive Suche auf der Datenbank
    • [ABAP] Interne Tabellen im Format Office Open XML (SpreadsheetML) speichern
    • [ABAP] ADBC: ABAP Database Connectivity
    • [ABAP] CSV-Datei in interne Table einlesen
    • [ABAP] Schlüsselspalten einer DB-Tabelle ermitteln
    • [ABAP] XLSX-Datei mit Klasse cl_ehfnd_xlsx einlesen und in SALV-Grid anzeigen
    • [ABAP] RTTI / RTTC / RTTS: Verwendung von Typdescriptoren
    • [ABAP] NativeSQL: Zugriff auf eine Oracle-Datenbank
    • [ABAP] ABAP2XLSX: Interne Tabelle als Excel-Datei (*.xlsx) aufbereiten und mit Desktop Office Integration (DOI) als Excel inplace anzeigen
  • Tags

    ABAP (976) Android (18) CLASS (20) cl_abap_list_layout (19) cl_bcs_convert (28) cl_gui_alv_grid (24) cl_gui_container (39) cl_gui_docking_container (25) cl_gui_frontend_services (50) cl_salv_table (58) cntl_simple_event (16) create (27) Date (16) default_screen (28) display (14) EWM (17) Fiori (21) FREE OBJECT (15) get_columns (22) gui_download (15) HTML (16) JavaScript (78) JSON (23) MIME (17) NEW (20) OData (32) ole2_object (15) OpenSQL (44) Python (23) Raspberry Pi (50) Raspberry Pi 2 (27) Raspberry Pi 4 (23) Raspian (22) RegEx (18) SAP (351) SAPUI5 (27) SELECT (25) String (33) stringtab (15) suppress_toolbar (19) UTF-8 (15) Value (27) XML (29) xstring (20) xstring_to_solix (15)
(W) 2025 by codezentrale.de
Präsentiert von Tempera & WordPress.