一
前言
CATALOG 或者SCHEMA 都属于数据库的抽象概念,主要用来解决命名冲突问题.
本文主要讨论怎么在ABAP的环境下访问数据库其它CATALOG中的表.
二
CATALOG VS SCHEMA
之前也没有认真理解这两个概念的差异, 只知道是架构在表的上级层次,(就像表家族的姓氏一般.) 以为二者只是不同数据库对同一个概念的不同称呼.
网上搜索了一下,有人认真比对了二者的差异. 因为HANA数据库的小众化,列表中没有提及.
但是从HANA STUDIO中的查看, HANA应该是支持catalog,不支持schema ,同时,每个用户都会有一个同名的catalog
三
ABAP环境的CATALOG名
ECC/S4系统安装的时候,也会在HANA数据库中创建一个CATALOG.
可以通过数据库工具(TCODE:DB02,还有其它TCODE也能进入相同的界面)查看,大部分的ECC/S4系统使用的HANA CATALOG名称是 SAPABAP1 或者SAPHANADB .
似乎安装系统的过程中,BASIS可以自定义CATALOG名称. ABAP数据字典对应的表都在这个CATALOG中. 大部分情况也不需要访问其它CATALOG的表.
四
访问其它CATALOG的情况
如果使用了SLT同步数据表内容 .
详见链接
无峰,公众号:ABAP 技巧与实战SAP操作手册之 LT数据同步配置
SLT工具为了避免目标数据库存在同名表,会根据同步的配置名创建一个同名的CATALOG. 在目标数据库的ABAP系统中, 如果需要访问这些同步过来的表, 就需要涉及到本文讨论的话题了. 怎么访问数据库中其它CATALOG的表.
五
访问方式
SQL编辑器访问
OPENSQL 访问
ADBC访问
外部视图访问
CDS视图访问(ADMP)
01
SQL编辑器访问
SQL编辑器是ABAP中的一个SQL语句编辑执行的工具(通过DB02事务代码可以进入),可以方便的创建记录访问数据库的SQL语句及查看执行情况.
SQL编辑器的底层逻辑使用了ADBC访问访问数据库.
这种访问方式不是一种正式的访问方式. 推荐大家使用它来熟悉表结构及内容.
之前写过一个代码生成工具, 可以直接通过在SQL语句中添加注释,来生成一个ABAP报表程序(该文章是付费文章, 无法引用,感兴趣的请自行查找)
02
NATIVE SQL 访问
NATIVE SQL 是ABAP中支持的一种通过数据库SQL语句访问本地或外部数据库(通过DBCO建立连接) 的方式.
DBCO建立数据库连接
无峰,公众号:ABAP 技巧与实战ABAP基础知识 访问外部数据库-配置篇
NATIVE SQL详见连接
无峰,公众号:ABAP 技巧与实战ABAP基础知识 访问外部数据库-开发篇
03
ADBC访问
ADBC 访问方式详见
无峰,公众号:ABAP 技巧与实战ABAP基础知识 访问外部数据库-开发篇
数据同步平台也是采用的这种方式访问外部数据库
04
外部视图访问
先在HANA STUDIO 中创建HANA视图. (怎么创建HANA视图不在本文讨论范畴,有兴趣的可以自行百度). HANA视图的 default client 属性中的session client 依赖于用户主记录中维护的session client . 建议session client 维护成 cross , 同时HANA视图中添加MANDT 字段. 在应用层面再确定CLIENT
用ECLIPS创建外部视图
外部视图可以在SE11/SE16N中访问. 同时可以像ABAP视图一样在ABAP语句中直接访问
05
CDS视图访问(AMDP)
AMDP(ABAP Managed Database Procedures)
AMDP是一种特殊的调用HANA 原生SQL的方式
CDS视图中是不支持直接使用HANA SQL语句, 只能如下方式实现.
创建一个类(该类只能在ECLIPSE中创建,SAPGUI中只能查看, 不能创建)和CDS视图配合来完成对数据库中其它CATALOG中的表的访问
指定类使用特定的界面
指定类方法关联 TABLE FUNCTION (CDS视图中的TABLE FUNCTION)
指定类方法中使用SQL脚本,只读属性
原生HANA SQL语句
CDS中定义的TABLE FUNCTION 同2
指定CDS视图执行创建的类方法
创建好的CDS视图因为不能定义ABAP视图名称, 因此无法通过SE11/SE16N访问, 只能通过ABAP语句访问
六
总结
本文的部分内容和前序访问外部数据库的方式有些重叠.
访问数据库的CATALOG也可以理解成访问一个指定的外部数据库(在创建DBCO连接时可以执行CATALOG的名称). 所以二者使用的方法是一致的.
最后两种(通过HANA视图创建外部视图访问,及通过CDS 及ADMP访问)就比较有针对性了. 更贴近本文的主题.
总之, 条条大路通罗马, 选择一个你最熟悉的路,或者在百度地图中标识最近的直通罗马. 咱们罗马见.
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
公众号 : syjf1976_abap
ABAP开发技巧
微信号 : 392077
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论