ABAP ADBC_QUERY 测试代码

项目中使用的接口取数采用的是DBLink的方式,对方提供的表名太长,超过标准程序ADBC_QUERY的参数长度,于是写了一份简单的测试代码用来测试连接和取数。

DBCO配置:

测试程序:

 

程序源码:

*&---------------------------------------------------------------------*
*& Report  ZTEST_ADBC_QUERY
*&
*&---------------------------------------------------------------------*
*&
*& 测试DBLink数据读取
*&---------------------------------------------------------------------*

REPORT ztest_adbc_query.

DATA:
  lo_adbc_connect TYPE REF TO cl_sql_connection,
  lo_adbc_query   TYPE REF TO cl_sql_statement,
  lo_adbc_result  TYPE REF TO cl_sql_result_set,
  lo_metadata     TYPE REF TO data,
  lt_metadata     TYPE adbc_rs_metadata_descr_tab.

DATA:
  lo_sql_exception           TYPE REF TO cx_sql_exception,
  lo_parameter_invalid       TYPE REF TO cx_parameter_invalid,
  lo_parameter_invalid_range TYPE REF TO cx_parameter_invalid_range,
  lo_parameter_invalid_type  TYPE REF TO cx_parameter_invalid_type,
  lo_struct_creation         TYPE REF TO cx_sy_struct_creation,
  lo_table_creation          TYPE REF TO cx_sy_table_creation,
  lo_exception               TYPE REF TO data,
  lv_err_text                TYPE string.

DATA:
  lo_structdescr TYPE REF TO cl_abap_structdescr,
  lo_tabletype   TYPE REF TO cl_abap_tabledescr,
  lo_result_ref  TYPE REF TO data.

FIELD-SYMBOLS:
   <lt_itab> TYPE STANDARD TABLE.

PARAMETERS:
  p_conn TYPE dbcon-con_name,
  p_sql  TYPE string,
  p_upto TYPE i DEFAULT 10.

START-OF-SELECTION.
* 获取连接
  TRY .
      lo_adbc_connect = cl_sql_connection=>get_connection( con_name = p_conn ).
    CATCH cx_sql_exception INTO lo_sql_exception.
      lv_err_text = lo_sql_exception->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 创建连接对象
  lo_adbc_query = lo_adbc_connect->create_statement( ).

* 执行Sql
  TRY .
      lo_adbc_result = lo_adbc_query->execute_query( p_sql ).
    CATCH cx_sql_exception INTO lo_sql_exception.
      lv_err_text = lo_sql_exception->get_text( ).
      WRITE lv_err_text.
      RETURN.
    CATCH cx_parameter_invalid INTO lo_parameter_invalid.
      lv_err_text = lo_parameter_invalid->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 获取元数据
  TRY .
      lt_metadata = lo_adbc_result->get_metadata( ).
    CATCH cx_sql_exception.
      lv_err_text = lo_sql_exception->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 获取元数据字段信息
  TRY .
      lo_metadata = lo_adbc_result->get_struct_ref( md_tab = lt_metadata
                                                   p_strict = abap_false ).
    CATCH cx_sy_struct_creation INTO lo_struct_creation.
      lv_err_text = lo_struct_creation->get_text( ).
      WRITE lv_err_text.
      RETURN.
    CATCH cx_parameter_invalid_range INTO lo_parameter_invalid_range.
      lv_err_text = lo_parameter_invalid_range->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 创建结构类型对象
  lo_structdescr ?= cl_abap_typedescr=>describe_by_data_ref( lo_metadata ).

* 创建表类型对象
  TRY .
      lo_tabletype = cl_abap_tabledescr=>create( p_line_type  = lo_structdescr
                                                 p_table_kind = cl_abap_tabledescr=>tablekind_std ).
    CATCH cx_sy_table_creation INTO lo_table_creation.
      lv_err_text = lo_table_creation->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 创建表对象引用
  CREATE DATA lo_result_ref TYPE HANDLE lo_tabletype.

* 传递sql结果至表对象引用
  TRY .
      lo_adbc_result->set_param_table( itab_ref = lo_result_ref ).
    CATCH cx_parameter_invalid INTO lo_parameter_invalid.
      lv_err_text = lo_parameter_invalid->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 获取所有数据
  TRY .
      lo_adbc_result->next_package( EXPORTING upto = p_upto ).
    CATCH cx_sql_exception INTO lo_sql_exception.
      lv_err_text = lo_sql_exception->get_text( ).
      WRITE lv_err_text.
      RETURN.
    CATCH cx_parameter_invalid_type INTO lo_parameter_invalid_type.
      lv_err_text = lo_parameter_invalid_type->get_text( ).
      WRITE lv_err_text.
      RETURN.
  ENDTRY.

* 关闭连接
  lo_adbc_result->close( ).

* 赋值到动态内表
  ASSIGN lo_result_ref->* TO <lt_itab>.

  cl_demo_output=>display( <lt_itab> ).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于java+springboot+vue实现的居家养老健康管理系统(文末源码+Lw)23-313

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智慧社区居家养老健康管理系统软件来发挥其高效地信息处理…

【opencv】示例-peopledetect.cpp HOG(方向梯度直方图)描述子和SVM(支持向量机)进行行人检测...

// 包含OpenCV项目所需的objdetect模块头文件 #include <opencv2/objdetect.hpp> // 包含OpenCV项目所需的highgui模块头文件&#xff0c;用于图像的显示和简单操作 #include <opencv2/highgui.hpp> // 包含OpenCV项目所需的imgproc模块头文件&#xff0c;用于图像…

streamlit 大模型前段界面

结合 langchain 一起使用的工具&#xff0c;可以显示 web 界面 pip install streamlit duckduckgo-search 运行命令 streamlit run D:\Python_project\NLP\大模型学习\test.py import os from dotenv import load_dotenv from langchain_community.llms import Tongyi load…

武汉星起航:跨境电商领域的佼佼者,专业团队引领行业新高度

在跨境电商这片充满机遇与挑战的广阔天地中&#xff0c;众多企业纷纷崭露头角&#xff0c;竞相追逐市场份额。然而&#xff0c;在这样一个充满竞争的环境中&#xff0c;武汉星起航电子商务有限公司凭借其坚定的战略眼光和专业的团队实力&#xff0c;稳健地立足于市场&#xff0…

杰发科技AC7840——CAN通信简介(3)_时间戳

0. 时间戳简介 时间戳表示的是收到该CAN消息的时刻&#xff0c;通过连续多帧的时间戳&#xff0c;可以计算出CAN消息的发送周期&#xff0c;也可以用于判断CAN消息是否被持续收到。 1. 使用步骤 注意分别是发送和接收的功能&#xff1a; 2. 现象分析 看下寄存器的情况&#x…

引领智能互联时代,紫光展锐赋能百业创新发展

随着5G技术的快速发展&#xff0c;各行各业对通信技术的需求也在不断升级。紫光展锐持续深耕5G垂直行业&#xff0c;不断推进5G标准演进&#xff0c;从R15到R16&#xff0c;再到R17&#xff0c;展锐携手生态合作伙伴&#xff0c;不断推出创新性解决方案&#xff0c;在5G RedCap…

二叉树之建树

树结构如下所示。 class TreeNode{int val;TreeNode left;TreeNode right;public TreeNode(){};public TreeNode(int val){this.val val;} }二叉树的建树逻辑一般可以采用后序遍历的逻辑&#xff0c;先创建父结点&#xff0c;然后通过递归的方式得到左右孩子结点&#xff0c;…

04-使用Docker镜像和仓库

回忆一下之前的创建镜像命令&#xff1a; [rootnode2 /]# docker run -i -t --name another_centos7 centos:7 /bin/bash这个命令从centos7的镜像创建一个名为another_centos7的容器&#xff0c;并且启动bash界面 什么是Docker镜像 Docker镜像是由文件系统叠加而成的。 底层…

Centos 7.9.2009 下 Gitlab 完全卸载

一、linux版本&#xff1a;lsb_release -a 二、GtiLab 版本 # 查看gitlab的版本号 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 三、开始卸载 3.1&#xff0c;停止Gitlab 相关服务 # 停止所有GitLab相关服务&#xff1a; sudo gitlab-ctl stop# 移除GitLab包…

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅…

CSS基础(上)(如果想知道CSS的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习完了html之后&#xff0c;我们就要开始学习三大件中的第二件—CSS&#xff0c;CSS 可以控制多重网页的样式和布局&#xff0c;也就是将我们写好的html代码加上一层华丽的衣裳&#xff0c;使网页变得更加精美。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨…

家居网购项目(二)

文章目录 1.会员登录1.需求分析2.程序框架图3.修改MemberDao添加方法 4.修改MemberDaoImpl添加方法MemberDaoTest单元测试 5.修改MemberService添加方法 6.修改MemberServiceImpl添加方法MemberServiceTest单元测试 7.编写LoginServlet1.修改login.html表单2.引入login_ok.html…

DNS 各记录类型说明及规则

各记录类型使用目的 记录类型使用目的A 记录将域名指向一个 IP 地址。CNAME 记录将域名指向另一个域名&#xff0c;再由另一个域名提供 IP 地址。MX 记录设置邮箱&#xff0c;让邮箱能收到邮件。NS 记录将子域名交给其他 DNS 服务商解析。AAAA 记录将域名指向一个 IPv6 地址。…

python-study-day2

pycharm注释(也可修改) 快捷键ctrl /手敲一个 " # " 这个是单行注释""" """ 左边这个三个引号可以完成多行注释 基础知识 常用的数据类型 def hello(self):print("Hello")print(type(1)) print(type("1"…

2024最新数据分级分类的架构方法流程指南(附下载)

以下是资料目录&#xff0c;如需下载请前往知识星球下载&#xff1a;https://t.zsxq.com/18KTZnJMX

微信小程序全屏开屏广告

效果图 代码 <template><view><!-- 自定义头部 --><u-navbar title" " :bgColor"bgColor"><view class"u-nav-slot" slot"left"><view class"leftCon"><view class"countDown…

C/C++内存泄漏及检测

“该死系统存在内存泄漏问题”&#xff0c;项目中由于各方面因素&#xff0c;总是有人抱怨存在内存泄漏&#xff0c;系统长时间运行之后&#xff0c;可用内存越来越少&#xff0c;甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一&#xff0c;因为除非用完内存或调用…

计算机网络---第十一天

生成树协议 stp作用&#xff1a; 作用&#xff1a;stp用于解决二层环路问题。 BPDU&#xff1a; 含义&#xff1a;桥协议数据单元&#xff0c;用于传递stp协议相关报文 分类&#xff1a;配置bpdu---用于传递stp的配置信息 tcn bpdu---用于通告拓扑变更信息 包含信息&…

基于opencv的视觉巡线实现

前言 这段时间在和学弟打软件杯的比赛&#xff0c;有项任务就是机器人的视觉巡线&#xff0c;这虽然不是什么稀奇的事情&#xff0c;但是对于一开始不了解视觉的我来说可以说是很懵了&#xff0c;所以现在就想着和大家分享一下&#xff0c;来看看是如何基于opencv来实现巡线的…

前端三剑客 —— JavaScript (第十一节)

内容回顾&#xff1a; jQuery 操作DOM jQuery 事件处理 Ajax jQuery 特效案例 全选效果 tab切换 下拉菜单 自定义动画 Bootstrap 入门 首先我们可以在bootstrap官网上进行下载。官网地址:https//www.bootcss.com/ 首先在我们的页面中导入bootstrap的样式&#xff0c;我们可…