ABAP与HANA集成 2:ABAP调用HANA存储过程或SQL语句

作者 idan lian  如需转载备注出处

需求

虽然是做BW模块,但是最近项目上种种,都需要给ABAP人员或者前台用户提供能供他们使用的表,就稍微研究了下ABAP和HANA的集成问题,因为我们BW更擅长的还是HANA,而且HANA的运行效率也会比ABAP层面快很多,这次举一个简单的需求,就是我在HANA有一段存储过程,是执行一段SELECT语句,并且把数据存到一个透明表,供ABAP开发去使用。

原理

通过标准的ABAP类去调用HANA的存储过程,在ABAP层面去触发执行HANA的存储过程,这个方法是一个同事告诉我的,特别感谢张同学。先说下原理,主要是用到一个标准类CL_SQL_CONNECTION下的方法GET_CONNECTION,我的理解就是用来连接数据库,并且调用数据库的语句。

类的代码如下:感兴趣的朋友可以再研究一下

具体步骤

需求是调用存储过程,那我们得先创建一段存储过程,直接在HANA对应的目录下执行语句,创建即可,上一段我的代码,就是很简单的把某个视图的数据插入到透明表中,这样abap就可以使用了

create procedure "SAPHANADB".ZBW_insert_ZCV_DT_BPCas
/********* Begin Procedure Script ************/
BEGIN
trunca tetable "SAPHANADB"."ZCV_DT_BPC";
insert into "SAPHANADB"."ZCV_DT_BPC"
SELECT
"RLDNR",
"RBUKRS",
"GJAHR",
"BELNR",
"DOCLN",
"TIME",
CASEWHEN"ACCOUNT"ISNULLTHEN''ELSE"ACCOUNT"ENDAS"ACCOUNT",
"ENTITY",
"ENTITY_TEXT",
"INTERCO",
"INTERCO_TEXT",
"AUDITTRAIL",
"CATEGORY",
"SCOPE",
"RHCUR",
"RWCUR",
"TYPE",
"MISC",
"KUNNR",
"KIDNO",
"ZZYLIU6",
"ZZYLIU11",
"VTWEG",
CASEWHEN"FLOW"ISNULLTHEN''ELSE"FLOW"ENDAS"FLOW",
CASEWHEN"ZHBHB"ISNULLTHEN''ELSE"ZHBHB"ENDAS"ZHBHB", 	
CASEWHEN"ZLOGIC_CODE"ISNULLTHEN''ELSE"ZLOGIC_CODE"ENDAS"ZLOGIC_CODE", 
CASEWHEN"ZLOGIC_VALUE"ISNULLTHEN''ELSE"ZLOGIC_VALUE"ENDAS"ZLOGIC_VALUE", 
"RSTGR",
"RFAREA",
"DRCRK",
"RASSC",
"MATKL",
CASEWHEN"MATKL_HB"ISNULLTHEN''ELSE"MATKL_HB"ENDAS"MATKL_HB",
CASEWHEN"CODE_QD_D"ISNULLTHEN''ELSE"CODE_QD_D"ENDAS"CODE_QD_D",
CASEWHEN"CODE_QD_E"ISNULLTHEN''ELSE"CODE_QD_E"ENDAS"CODE_QD_E",
"RACCT",
"RMVCT",
CASEWHEN"LAND1"ISNULLTHEN''ELSE"LAND1"ENDAS"LAND1",
CASEWHEN"REGION"ISNULLTHEN''ELSE"REGION"ENDAS"REGION",
"ZZYLIU10",
"MATNR",
CASEWHEN"MATNR_TEXT"ISNULLTHEN''ELSE"MATNR_TEXT"ENDAS"MATNR_TEXT",
"BTTYPE",
"ZDATE",
CASEWHEN"PSPID"ISNULLTHEN''ELSE"PSPID"ENDAS"PSPID",
CASEWHEN"AUFNR"ISNULLTHEN''ELSE"AUFNR"ENDAS"AUFNR",
CASEWHEN"ZZYLIU9"ISNULLTHEN''ELSE"ZZYLIU9"ENDAS"ZZYLIU9",
CASEWHEN"ATTRIBUTE1"ISNULLTHEN''ELSE"ATTRIBUTE1"ENDAS"ATTRIBUTE1",
CASEWHEN"ATTRIBUTE2"ISNULLTHEN''ELSE"ATTRIBUTE2"ENDAS"ATTRIBUTE2",
CASEWHEN"ATTRIBUTE3"ISNULLTHEN''ELSE"ATTRIBUTE3"ENDAS"ATTRIBUTE3",
CASEWHEN"HKONT_SR"ISNULLTHEN''ELSE"HKONT_SR"ENDAS"HKONT_SR",
CASEWHEN"HKONT_CB"ISNULLTHEN''ELSE"HKONT_CB"ENDAS"HKONT_CB",
"ANLN1",
sum("HSL") AS"HSL",
sum("WSL") AS"WSL",
sum("MSL") AS"MSL"
FROM"_SYS_BIC"."ZP_DFYH_BW.ZP_LL/COPYOFZCV_DT_BPC"
WHERE"RBUKRS"IN('YH10','YH20','YH12') 
GROUPBY"RLDNR",
"RLDNR",
"RBUKRS",
"GJAHR",
"BELNR",
"DOCLN",
"TIME",
CASEWHEN"ACCOUNT"ISNULLTHEN''ELSE"ACCOUNT"END,
"ENTITY",
"ENTITY_TEXT",
"INTERCO",
"INTERCO_TEXT",
"AUDITTRAIL",
"CATEGORY",
"SCOPE",
"RHCUR",
"RWCUR",
"TYPE",
"MISC",
"KUNNR",
"KIDNO",
"ZZYLIU6",
"ZZYLIU11",
"VTWEG",
CASEWHEN"FLOW"ISNULLTHEN''ELSE"FLOW"END,
CASEWHEN"ZHBHB"ISNULLTHEN''ELSE"ZHBHB"END, 	
CASEWHEN"ZLOGIC_CODE"ISNULLTHEN''ELSE"ZLOGIC_CODE"END, 
CASEWHEN"ZLOGIC_VALUE"ISNULLTHEN''ELSE"ZLOGIC_VALUE"END, 
"RSTGR",
"RFAREA",
"DRCRK",
"RASSC",
"MATKL",
CASEWHEN"MATKL_HB"ISNULLTHEN''ELSE"MATKL_HB"END,
CASEWHEN"CODE_QD_D"ISNULLTHEN''ELSE"CODE_QD_D"END,
CASEWHEN"CODE_QD_E"ISNULLTHEN''ELSE"CODE_QD_E"END,
"RACCT",
"RMVCT",
CASEWHEN"LAND1"ISNULLTHEN''ELSE"LAND1"END,
CASEWHEN"REGION"ISNULLTHEN''ELSE"REGION"END,
"ZZYLIU10",
"MATNR",
CASEWHEN"MATNR_TEXT"ISNULLTHEN''ELSE"MATNR_TEXT"END,
"BTTYPE",
"ZDATE",
CASEWHEN"PSPID"ISNULLTHEN''ELSE"PSPID"END,
CASEWHEN"AUFNR"ISNULLTHEN''ELSE"AUFNR"END,
CASEWHEN"ZZYLIU9"ISNULLTHEN''ELSE"ZZYLIU9"END,
CASEWHEN"ATTRIBUTE1"ISNULLTHEN''ELSE"ATTRIBUTE1"END,
CASEWHEN"ATTRIBUTE2"ISNULLTHEN''ELSE"ATTRIBUTE2"END,
CASEWHEN"ATTRIBUTE3"ISNULLTHEN''ELSE"ATTRIBUTE3"END,
CASEWHEN"HKONT_SR"ISNULLTHEN''ELSE"HKONT_SR"END,
CASEWHEN"HKONT_CB"ISNULLTHEN''ELSE"HKONT_CB"END,
"ANLN1";
END/********* End Procedure Script ************/

创建好存储过程后,要把技术名称copy下来,后面需要使用

接下来在abap层面,也就是GUI中SE38创建程序,直接copy下面这段代码即可,需要替换的地方我后面会标注出来

REPORT ZBW_EXECUTE_HANA_PROC.
PARAMETERS:ZVARIANT(2550) TYPE C. "存储过程
DATA remote_exception  TYPE REF TO CX_SFW_REMOTE_ERROR.
DATA msg TYPE c LENGTH 255.
DATA:ZRESULT(10) TYPE C.
TYPES:BEGIN OF result_t,key TYPE i,value TYPE string,END OF result_t.DATA: stmt_ref TYPE REF TO cl_sql_statement,cx_sql_exception TYPE REF TO cx_sql_exception,lv_text TYPE string,res_ref TYPE REF TO cl_sql_result_set,d_ref TYPE REF TO DATA,result_tab TYPE TABLE OF result_t,result_line TYPE result_t,row_cnt TYPE i,con_ref TYPE REF TO cl_sql_connection.TRY.con_ref = cl_sql_connection=>get_connection( 'DBMS_USER_MGT' ).stmt_ref = con_ref->create_statement( ).CONCATENATE 'CALL  ' ZVARIANT ' ()' into  lv_text .*         lv_text = 'CALL  "CRRC"."CRRC.PRO::SP_CRRC_D" ()'.stmt_ref = con_ref->create_statement( ).res_ref = stmt_ref->execute_query( lv_text ).con_ref->COMMIT( ).CATCH CX_SFW_REMOTE_ERROR INTO remote_exception.msg = remote_exception->get_text( ).WRITE / msg.
ENDTRY.

下面是需要更改的地方,其实主要就是HANA的链接名称,以及存储过程的技术名称,LV_TEXT中,其实就是HANA中调用存储过程的语句,LV_TEXT这里其实就是HANA CALL FOUNCION的完整语句,我理解其实除了存储过程,别的语句也可以执行,比如增删改查,或者一些赋值的代码

HANA的链接名称通过TCODE DBCO去查询

上面的程序创建后,激活执行就可以使用了,作为BW开发也可以把他放到处理链里去作业调度

更详细的参考链接如下:开发者日志:ABAP通过辅助数据库连接HANA | SAP Blogs

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于CNN+数据增强+残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)+数据集+模型(二)

系列文章目录 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型(一) 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型&#xf…

NVMe前世今生

NVMe前世今生 1 NVMe的由来2 NVMe工作原理3 NVMe优点4 NVMe适用场景 本文属于《 NVMe协议基础系列教程》之一,欢迎查看其它文章。 1 NVMe的由来 目前机械硬盘大多数使用 SATA (Serial ATA Advanced Host Controller Interface) 接口,接口协议为 AHCI&a…

vue + element 项目表格多选根据状态来禁用

首先如图效果 对elementUI中table表格的多选框进行 可勾选 和 不可勾选 的处理 给 type 属性为 selection 的加一个事件:selectableselected’ <el-table-column type"selection" width"55" :selectable"selected"> </el-table-colum…

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。 在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c; 用户也可以自定义Service Account&#xff0c;与Service…

目标检测——YOLO算法解读(通俗易懂版)

论文&#xff1a;You Only Look Once: Unified, Real-Time Object Detection 作者&#xff1a;Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi 链接&#xff1a;https://arxiv.org/abs/1506.02640 代码&#xff1a;http://pjreddie.com/yolo/ yolo系列检测算法开…

Excel小技能:excel如何将数字20231211转化成指定日期格式2023/12/11

给了一串数字20231211&#xff0c;想要转成指定格式的日期格式&#xff0c;发现设置单元格格式为指定日期格式不生效&#xff0c;反而变成很长很长的一串#这个&#xff0c;如图所示&#xff1a; 其实&#xff0c;正确的做法如下&#xff1a; 1&#xff09;打开数据功能界面&am…

谷达冠楠科技:抖音店铺被退店是什么意思

随着互联网的普及和发展&#xff0c;电商平台已经成为了人们购物的主要渠道之一。在众多的电商平台中&#xff0c;抖音作为短视频领域的佼佼者&#xff0c;也吸引了大量的商家入驻。然而&#xff0c;有些商家可能会遇到抖音店铺被退店的情况&#xff0c;那么这究竟是什么意思呢…

病案管理的定义、流程及应用分析

病案管理是指针对病人的基本信息&#xff0c;病历&#xff0c;就诊记录等进行收集、整理、存储、分析和应用的一项管理工作。它在医院、医疗机构和医疗行业中具有重要的作用&#xff0c;能够提高医疗服务的质量、效率和安全性。本文将就病案管理的定义、流程以及其在医疗健康领…

React实现全局Loading

css #__loading {position:fixed;top: 0;left: 0;z-index: 99999;display: flex;align-items: center;justify-content: center;width: 100%;height: 100%;background: rgba(0, 0, 0, 0); } 页面代码 使用了antd的Spin组件 import React from react import ReactDOM from re…

编程序中的魔法语句|循环-使用频率高的优雅代码

一. print和import的更多信息 1.1 使用逗号输出 A.打印多个表达式,用逗号隔开,会在每个参数之间插入一个空格符: 复制代码代码如下: >>> print age:,42 age: 42 B.同时输出文本和变量值,却又不希望使用字符串格式化: 复制代码代码如下: >>> name = Pe…

emmc存储大小解决方案

当发现emmc space 0.2G或者为0 的时候说名emmc有问题了&#xff0c;正常情况下是3.98G。 所以需要做如下处理&#xff1a; 输入&#xff1a;第一步&#xff1a;mkfs.ext4 /dev/mmcblk0p1 &#xff08;格式&#xff1a;mkfs.ext4 参数 设备名 原文链接&#xff1a;mkfs.ext4 命…

(c语言)字符逆序——非递归

#include<stdio.h> #include<string.h> int main(int argc, char* argv[]) {char a[10000];char b[10000];gets(a);int i, c;c (int)strlen(a);for (i 0; i < c; i){b[i] a[c-i-1]; //将\0之前的元素赋值给b[]}b[c] \0; //之后在所有元素后加上\0,将…

优思学院|调优操作(EVOP)是什么?

EVOP是Evolutionary Operation的缩写&#xff0c;中文多译作&#xff0c;调优操作&#xff0c;意思是进化地操作&#xff0c;也是实验设计方法中的其中一种&#xff0c;可以应用于六西格玛流程DMAIC里的改进阶段。 调优操作&#xff08;EVOP&#xff09;是一种用于改善过程或产…

Mac安装Nginx

一起学习 1、确认你的电脑是否安装homebrew&#xff0c;打开电脑终端 输入&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2、确认homebrew是否安装成功&#xff0c;在终端输入&#xff1a; br…

怎么远程控制电脑?两种方法轻松实现!

不知道电脑远程控制怎么弄&#xff1f;本文将分享两种简单又实用的远程控制方法&#xff0c;能够让你轻松的远程控制电脑。远程控制一直是一个备受关注的话题&#xff0c;无论在何种场合都能发挥作用。掌握了远程控制的方法&#xff0c;不仅能够快速解决紧急问题&#xff0c;还…

【老牌期刊】IF:6+,2天预审,3-5个月录用!

期刊简介 1区计算机智能类SCI 【期刊概况】IF&#xff1a;6.0-7.0&#xff0c;JCR1区&#xff0c;中科院2区&#xff1b; 【终审周期】走期刊部系统&#xff0c;3个月左右录用&#xff1b; 【检索情况】SCI检索&#xff1b; 【WOS收录年份】2018年&#xff1b; 【自引率】…

用友 CRM help2.php存在任意文件读取漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 用友CRM&#xff08;Customer Relationship Management&#xff0c;客户关系管理&#xff09;是由用友公司开发的一款软件&#xff0c;专门设计用于帮助企业管理与客户相关的业务活动。这款软件通常包括客户信息管…

windows 安装jenkins

下载jenkins 官方下载地址&#xff1a;Jenkins 的安装和设置 清华源下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/windows-stable/ 最新支持java8的版本时2.346.1版本&#xff0c;在清华源中找不到&#xff0c;在官网中没找到windows的下载历史&#xff…

UE5 Landscape地貌制作 - 学习笔记

P2. 创建地形 https://www.bilibili.com/video/BV1mD4y1D7D6?p2&spm_id_frompageDriver&vd_source707ec8983cc32e6e065d5496a7f79ee6 新建一个Basic场景选择Landscape Mode 生成预览网格&#xff08;绿色网格&#xff09;从文件导入&#xff1a;可以导入dem高度图地貌…

使用小程序实现App灰度测试的好处

灰度测试&#xff08;Gray Testing&#xff09;是一种软件测试策略&#xff0c;也被称为渐进性测试或部分上线测试。在灰度测试中&#xff0c;新的软件版本或功能并非一次性推送给所有用户&#xff0c;而是仅在一小部分用户中进行测试。这可以帮助开发团队逐步暴露新功能或版本…