SAP Native SQL 的简单说明

        Open SQL访问数据字典中声明的数据库表,不区分数据库类型,执行时会自动转换为对应的语句,且可以使用本地缓存。Native SQL使用特定于数据库的SQL语句,但是可以访问比Open SQL 更多的表,更多的操作,缺点也很明显,比如没有语法检查,导致一些问题在运行时才能发现

简单列出三种使用Native SQL的场景

        1 连接外部数据库访问数据

        2 访问仅在数据库中的表,比如常见的慢SQL查询,以及处理SE14报错的表

        3 一些特定数据库的语法的使用

Native SQL 分为Static Native SQL和Dynamic Native SQL

如下是Static Native SQL的一个简单查询例子        

DATA:ls_t001  TYPE t001,
     lv_bukrs TYPE bukrs VALUE '0001'.
DATA: lx_sql TYPE REF TO cx_sy_native_sql_error.

TRY.
      "结尾不加符号 . , 变量前加符号 : 
    EXEC SQL.
      SELECT *
       INTO :ls_t001
       FROM t001
       WHERE mandt = '000' AND bukrs = :lv_bukrs
    ENDEXEC.

  CATCH cx_sy_native_sql_error INTO lx_sql.

ENDTRY.

如下是Dynamic Native SQL的一个简单查询例子

DATA: lt_t1 TYPE TABLE OF t001,
        ls_t1 TYPE t001.

  DATA: lo_sql    TYPE REF TO cl_sql_statement,
        lx_sql    TYPE REF TO cx_sql_exception,
        lx_sqlpa  TYPE REF TO cx_parameter_invalid,
        lo_result TYPE REF TO cl_sql_result_set,
        lr_t1     TYPE REF TO data.

  TRY.
      CREATE OBJECT lo_sql EXPORTING con_ref = cl_sql_connection=>get_connection( cl_sadl_dbcon=>get_default_dbcon( ) ).
      lo_result = lo_sql->execute_query( |SELECT * FROM t001 WHERE mandt = { sy-mandt } AND bukrs = '0001' | ).
      GET REFERENCE OF lt_t1 INTO lr_t1.
      lo_result->set_param_table( lr_t1 ).
      lo_result->next_package( ).
      lo_result->close( ).
    CATCH cx_sql_exception INTO lx_sql.
      DATA(lv_t) = lx_sql->get_text( ).
    CATCH cx_parameter_invalid INTO lx_sqlpa.
      lv_t = lx_sqlpa->get_text( ).
  ENDTRY.
  

关于Open SQL 和Native SQL的效率,通过一个简单的demo程序进行验证(ORACLE数据库,750)

 测试表为随机生成的100W条数据,根据单主键获取多条数据,通过选择条件和执行顺序排除缓存的影响,大概结果为Open SQL 和Static Native SQL的效率相差不多,均优于Dynamic Native SQL,其中一次的输入截图如下

Native SQL 在应用在外部数据库取值时,需要添加数据库连接

事务代码:DBACOCKPIT

 直接通过Native SQL 访问外部数据库不太建议,类似的需求可以考虑使用hana虚拟表处理。

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

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

相关文章

Python学习笔记之IP监控及告警

一、需求说明 作为一名运维工程师,监控系统必不可少。不过我们的监控系统往往都是部署在内网的,如果互联网出口故障,监控系统即使发现了问题,也会告警不出来,这个时候我们就需要补充监控措施,增加从外到内的…

QT去除窗口边框(无边框)

ch21_TencentMeetingLogin::ch21_TencentMeetingLogin(QWidget *parent): QDialog(parent) {ui.setupUi(this);this->setWindowFlags(Qt::FramelessWindowHint);//去除窗口边框 } 但此时窗口不能拖动且点击任务栏程序图标不能最小化! this->setWindowFlags(Q…

vue实现弹窗输入验证码

实现思路:前端输入完账号和密码,点击登录按钮的时候,弹出一个输入验证码的窗口,后端把验证码图片通过base64的字符传给前端,前端把字符当成图片展示出来。输入完验证码,点击确认进行登录,把验证…

1.Shell变量

1.shell变量介绍 Linux Shell中的变量分为: 系统变量 和 用户自定义变量系统变量:$HOME、$PWD、$SHELL、$USER等等, 比如 echo $HOME显示当前shell所有变量 :set 2.自定义变量 2.1 语法规则 # 基本语法 1. 定义变量: 变量名值 2. 撤销变量: unset变量…

多线程篇-4--重点概念1(volatile,Synchronized,内存屏障,MESI协议)

一、volatile (1)、简述 volatile是java提供的一个关键字,英文意思为不稳定的。 可以保障被声明对象的可见性和一定程度上的有序性,但不能保证操作的原子性。 当一个变量被声明为volatile时,意味着该变量的值会直接从…

使用Yarn标签能力实现任务资源隔离

我们在工作或自己研究的时候,一般不关注yarn的lable能力,这主要因为业内大部分用的是公有云,即使有私有云或者是独占集群,集群的运维通常也是抛给厂商了,所以这就导致Label的能力被忽视了,并且这个能力默认…

大数据新视界 -- 大数据大厂之 Hive 数据质量监控:实时监测异常数据(下)(18/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

基础(函数、枚举)错题汇总

枚举默认从0开始,指定后会按顺序赋值 而这个枚举变量X,如果在全局(函数外部)定义,那默认为0,如果在函数内部(局部变量),那就是随机值,必须初始化。 枚举变量…

[RabbitMQ] 延迟队列+事务+消息分发

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

[GKCTF 2021]签到

[GKCTF 2021]签到 wireshark跟踪http流,基本编解码,倒叙,栅栏密码 找到cat /f14g 把包里返回的字符串先hex解码,再base64解码,看到一个时间是倒叙,不含flag 继续往下面翻,可以看到cat%2Ff14g%7…

后端-mybatis的一对一查询

准备两张表菜单表和分类表,一个菜单对应一个分类,一个分类对应多个菜单,我们从菜单对分类来操作一对一的关系,首先在菜单表里面要有一个分类表的id字段。 使用mapper的映射文件.xml来写的话我们在resource目录下创建各自mapper的…

【科研】9如何高效阅读和理解学术论文

【科研】9如何高效阅读和理解学术论文 写在最前面一、为什么需要系统的阅读方法?二、阅读论文的11步方法三、实践示例四、常见问题解答五、结语 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ …

【python】OpenCV—Tracking(10.5)—dlib

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数dlib.correlation_tracker() 6、参考 1、功能描述 基于 dlib 库,实现指定类别的目标检测和单目标跟踪 2、代码实现 caffe 模型 https://github.com/MediosZ/MobileNet-SSD/tree/master/…

【Python数据分析】房价预测:使用线性回归模型预测波士顿房价

博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 📝引言 📝房价预测的意义 房价预测对于房地产行业、投资者和政策制定者来说具有重要意义。通过对房价进行准确预测&#xf…

java——PV操作

PV操作通常指的是P操作和V操作,它们是信号量(Semaphore)机制中的两个基本操作,用于解决进程或线程间的同步和互斥问题。P操作(也称为wait操作或down操作)用于将信号量的值减1,如果结果为负数&am…

5. langgraph实现高级RAG (Adaptive RAG)

1. 数据准备 from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import WebBaseLoader from langchain_community.vectorstores import Chromaurls ["https://lilianweng.github.io/posts/2023-06-23-age…

redis基础spark操作redis

Redis内存淘汰策略 将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。 为什么要使用内存淘汰策略呢? 当海量数据涌入redis,导致redis装不下了咋办,我们需要根据redis的内存淘汰策略,淘汰一些不那…

C++优选算法十七 多源BFS

1.单源最短路问题 一个起点一个终点。 定义:在给定加权图中,选择一个顶点作为源点,计算该源点到图中所有其他顶点的最短路径长度。 2.多源最短路问题 定义:多源最短路问题指的是在图中存在多个起点,需要求出从这些…

DDR3保姆级使用教程:ZYNQ 7010

内容:使用DDR3 IP核,向DDR3写入数据,然后再读出数据,通过串口打印。 设备:ZYNQ 7010 xc7z010clg-400-1。软件VIVADO 2018.3 (1)工程模块:一个写FIFO,一个读FIFO。一个ZYNQ IP核&am…

vue3使用monaco编辑器(VSCode网页版)

vue3使用monaco编辑器(VSCode网页版) 文章说明参考文章核心代码效果展示实践说明源码下载 文章说明 一直在找网页版的编辑器,网页版的VSCode功能很强大,这个monaco就是VSCode样式的编辑器,功能很强大,可以直…