ABAP–原生SQL接口API(ADBC)的使用
sap为大家提供原生SQL(Native SQL)接口API,该接口主要由四个类组成:
CL_SQL_STATEMENT - Execution of SQL Statements
CL_SQL_PREPARED_STATEMENT - Prepared SQL Statements
CL_SQL_CONNECTION - Administration of Database Connections
CX_SQL_EXCEPTION - Exception Class
动态 sql 语句
DATA: lr_sql_result TYPE REF TO cl_sql_result_set,
sql TYPE REF TO cl_sql_statement,
tab_ref TYPE REF TO data,
gt_components TYPE cl_abap_structdescr=>component_table,
gs_components LIKE LINE OF gt_components,
v_rows TYPE i.
CREATE OBJECT sql.
DATA : lt_meta TYPE adbc_rs_metadata_descr_tab,
lt_column TYPE adbc_column_tab,
ls_meta LIKE LINE OF lt_meta,
ls_column LIKE LINE OF lt_column,
lv_type TYPE abap_typekind.
FIELD-SYMBOLS :
TRY.
lr_sql_result = sql->execute_query( 'SELECT * FROM T001 ' ).
lt_meta = lr_sql_result->get_metadata( ).
LOOP AT lt_meta INTO ls_meta.
ls_column = ls_meta-column_name.
APPEND ls_column TO lt_column.
gs_components-name = ls_meta-column_name.
-
GS_COMPONENTS-TYPE ?= CL_ABAP_DATADESCR=>DESCRIBE_BY_DATA( P_DATA = LS_META-DATA_TYPE ). IF to_upper( ls_meta-data_type ) = 'STRING' . lv_type = 'g'. ELSE. lv_type = ls_meta-data_type. ENDIF. gs_components-type ?= cl_abap_elemdescr=>get_by_kind( p_type_kind = lv_type p_length = ls_meta-length p_decimals = ls_meta-decimals ). APPEND gs_components TO gt_components.
ENDLOOP.
DATA lr_tabledescr TYPE REF TO cl_abap_tabledescr.
lr_tabledescr = cl_abap_tabledescr=>create(
p_line_type = cl_abap_structdescr=>create( p_components = gt_components ) ).CREATE DATA tab_ref TYPE HANDLE lr_tabledescr.
-
get REFERENCE OF LT_DATA INTO tab_ref.
lr_sql_result->set_param_table(
EXPORTING
itab_ref = tab_ref " Reference to Output Variable
corresponding_fields = lt_column ).
**Execute the query
lr_sql_result->next_package( ).
v_rows = lr_sql_result->next( ).
ASSIGN tab_ref->* TO <table>.
- MOVE-CORRESPONDING [] TO it_query[].
CATCH cx_root INTO DATA(lv_error). -
ROLLBACK WORK.
- e_code = 1.
DATA(e_msg) = ‘获取记录不存在:’ && lv_error->get_text( ).
RETURN.
ENDTRY.
lr_sql_result->close( ).
**cl_demo_output **
SELECT *
FROM scarr
INTO TABLE @DATA(carriers).
CALL TRANSFORMATION id SOURCE carriers = carriers
RESULT XML DATA(xml).
cl_demo_output=>begin_section( Some Text
).
cl_demo_output=>write_text( |blah blah blah \n| &&
|blah blah blah| ).
cl_demo_output=>next_section( Some Data
).
cl_demo_output=>begin_section( Elementary Object
).
cl_demo_output=>write_data( carriers[ 1 ]-carrid ).
cl_demo_output=>next_section( Internal Table
).
cl_demo_output=>write_data( carriers ).
cl_demo_output=>end_section( ).
cl_demo_output=>next_section( XML
).
cl_demo_output=>write_xml( xml ).
cl_demo_output=>display( ).