TYPES:
BEGIN OF TY_AIRLINE, "设定内表和工作区结构体的类型
AIRLINE_ID TYPE SCARR-CARRID,
AIRLINE_NAME TYPE SCARR-CARRNAME,
AIRLINE_CURRENCY TYPE SCARR-CURRCODE,
URL TYPE SCARR-URL,
URL2 TYPE STRING,
END OF TY_AIRLINE.
"设定承载SQL语句的变量,返回结果变量、条件变量
DATA:
LV_STATEMENT TYPE STRING,
LT_AIRLINE TYPE TABLE OF TY_AIRLINE,
LR_RESULT TYPE REF TO DATA,
LV_CURRENCY TYPE SCARR-CURRCODE,
"设定ADBC相关类的连接对象、SQL对象、结果对象、异常对象的变量
LO_CONN TYPE REF TO CL_SQL_CONNECTION,
LO_STATEMENT TYPE REF TO CL_SQL_STATEMENT,
LO_RESULT_SET TYPE REF TO CL_SQL_RESULT_SET,
LX_SQL TYPE REF TO CX_SQL_EXCEPTION.
"关联内表到结果对象变量中
GET REFERENCE OF LT_AIRLINE INTO LR_RESULT.
"设定条件变量的值
LV_CURRENCY = 'EUR'.
" 拼接HANA Native SQL,该语法是HANA的SQL Script所支持的语法
" 也可以调用SQL Script的函数如SUBSTRING
LV_STATEMENT = | SELECT CARRID, CARRNAME, CURRCODE, URL, |
&& | SUBSTRING (URL,8,LENGTH(URL)) AS URL2 |
&& | FROM scarr WHERE currcode = '{ LV_CURRENCY }' and |
&& | CARRID <> 'CA' |.
TRY.
" 调用SQL-Connection方法,连接到数据库
LO_CONN = CL_SQL_CONNECTION=>GET_CONNECTION( ).
" 调用SQL-Statement方法,创建SQL对话
LO_STATEMENT = LO_CONN->CREATE_STATEMENT( ).
" 调用SQL-query 方法,执行SQL语句
LO_RESULT_SET = LO_STATEMENT->EXECUTE_QUERY( LV_STATEMENT ).
" 调用SQL-set_param_table 方法,指定用哪个内表来记录返回结果
LO_RESULT_SET->SET_PARAM_TABLE( LR_RESULT ).
" 读取数据集的下一组数据到内表
LO_RESULT_SET->NEXT_PACKAGE( ).
" 得到结果后,关闭数据集
LO_RESULT_SET->CLOSE( ).
"打印内表
CL_DEMO_OUTPUT=>DISPLAY_DATA( LT_AIRLINE ).
"错误处理,如SQL有误,则在此处报出log,而不会导致系统崩溃(short dump)
CATCH CX_SQL_EXCEPTION INTO LX_SQL.
WRITE: LX_SQL->GET_TEXT( ).
ENDTRY.