BPC开发:ABAP读取HANA view
在HANA DB层面写的VIEW,可以用ABAP调用得到返回结果。主要用到cl_sql_connection,cl_sql_statement,cl_sql_result_set等类。
将其封装:
方法代码
METHOD excute_sql.
DATA lv_data_type TYPE char200.
TYPE-POOLS:adbc.
* DATA:lv_kostl TYPE string.
DATA lv_sql TYPE string.
DATA : v_rows TYPE i.
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.
*Define variables for the connection
DATA: lr_dbconn TYPE REF TO cl_sql_connection,
* lv_con TYPE dbcon_name VALUE 'HDB',
lr_sql_env TYPE REF TO cl_sql_statement,
lr_sql_result TYPE REF TO cl_sql_result_set,
lr_sql_exc TYPE REF TO cx_sql_exception, "#EC NEEDED
lr_par_exc TYPE REF TO cx_parameter_invalid, "#EC NEEDED
* dref TYPE REF TO data,
* tab_ref_001 TYPE REF TO data,
cx_sql_exception TYPE REF TO cx_sql_exception,
lv_text TYPE string.
FIELD-SYMBOLS :
<ft_data> TYPE table.
DATA: gt_components TYPE cl_abap_structdescr=>component_table,
gs_components LIKE LINE OF gt_components.
DATA lr_tabledescr_001 TYPE REF TO cl_abap_tabledescr.
DATA es_message TYPE uj0_s_message.
*----连接数据库取数
**Get connection
lr_dbconn = cl_sql_connection=>get_connection( con_name = iv_con ).
CREATE OBJECT lr_sql_env
EXPORTING
con_ref = lr_dbconn.
TRY.
* excute SQL
lr_sql_result = lr_sql_env->execute_query( iv_sql ).
* get SQL resule set
lt_meta = lr_sql_result->get_metadata( ).
REFRESH : gt_components,lt_column.
LOOP AT lt_meta INTO ls_meta.
CLEAR gs_components.
gs_components-name = ls_meta-column_name.
gs_components-type ?= cl_abap_datadescr=>describe_by_data( p_data = lv_data_type ).
APPEND gs_components TO gt_components.
CLEAR ls_column.
ls_column = ls_meta-column_name.
APPEND ls_column TO lt_column.
ENDLOOP.
lr_tabledescr_001 = cl_abap_tabledescr=>create(
p_line_type = cl_abap_structdescr=>create( p_components = gt_components ) ).
* CREATE DATA tab_ref_001 TYPE HANDLE lr_tabledescr_001.
CREATE DATA et_data TYPE HANDLE lr_tabledescr_001.
lr_sql_result->set_param_table(
EXPORTING
itab_ref = et_data "tab_ref_001 " Reference to Output Variable
corresponding_fields = lt_column ).
*Execute the query
lr_sql_result->next_package( ).
v_rows = lr_sql_result->next( ).
CATCH cx_sql_exception INTO cx_sql_exception.
lv_text = cx_sql_exception->get_text( ).
MESSAGE lv_text TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
* WRITE:/ 'Error:' , lv_text.
ENDTRY.
lr_sql_result->clear_parameters( ).
lr_sql_result->close( ).
ENDMETHOD.
实际调用:
SQL举例:
SELECT * FROM "_SYS_BIC"."ZBPC.ZBPCP.ZBPCP_RE/ZCV_GL_FIN"WHERE "P_ENTITY" = 'ECBUA900_INP' AND "P_TIME" IN ( '2021.01','2021.02' )
20210601注:里面可以参考此博文优化动态内表的创建:https://blog.csdn.net/yang362046076/article/details/117443896
post SAP-Garson
原文链接:https://blog.csdn.net/yang362046076/article/details/116655012文章来自于网络,如果侵犯了您的权益,请联系站长删除!