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_t001FROM t001WHERE mandt = '000' AND bukrs = :lv_bukrsENDEXEC.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虚拟表处理。

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

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

相关文章

2024前端面试经验分享

一、简历 1、整理步骤 把自己过去做过的有亮点的事情整理一遍。项目经历,通过 star 法则来做,不赘述,网上很多人讲。需要突出的亮点见下面。 2、前端开发常见突出亮点: 性能优化代码优化组件封装框架原理项目推进、协调能力技…

IEEE 802.11s wifi mesh网络

IEEE 802.11s 是对 IEEE 802.11 标准的扩展,允许多个无线节点相互连接,而无需在它们之间有接入点(AP)。例如,如果您家里有一个 AP,您想将文件复制到另一台连接到相同 AP 的笔记本电脑 B(与您的笔…

Git中HEAD、工作树和索引的区别

在Git版本控制系统中,HEAD、工作树(Working Tree)和索引(Index)是三个非常重要的概念,它们分别代表了不同的状态或区域,下面我将对这三个概念进行详细的解释。 HEAD 定义:HEAD是一…

ARP欺骗-监控网络

kali: 使用arp-scan -l 查看同个局域网 windows arp -a 查看地址的物理地址 192.168.21.2 对应的是00-50-56-f5-d5-f0 攻击利用: 我们要让目标ip的流量经过我的网卡,从网关出去 使用的开启 echo 1 > /proc/sys/net/ipv4/ip_forward 当为0时,我们不转发&…

HTML 画布:网页上的创意绘图板

HTML 画布:网页上的创意绘图板 HTML5的画布(Canvas)元素为网页开发者提供了一种在网页上绘制图形和动画的强大工具。它是HTML5标准的一部分,被设计为允许脚本语言(通常是JavaScript)动态渲染图形、图像和动画。在这篇文章中,我们将深入探讨HTML画布的各个方面,包括其基…

pycharm链接neo4j(导入文件)

1.新建csv文件 2.写入文件 3.运行代码 import csv from py2neo import Graph, Node# 连接到Neo4j数据库,使用Bolt协议 graph Graph("bolt://localhost:7687", auth("neo4j", "password"))# 读取CSV文件 with open(D:\\Users\\ran…

Lodash的debounce方法:优化你的函数调用

在JavaScript开发中,我们经常会遇到需要在特定事件触发后执行某些操作的情况,比如窗口调整大小、滚动、按键输入等。然而,如果这些事件被频繁触发,相应的函数也会被频繁调用,这可能导致性能问题。这时,Loda…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第15篇(完结):讨论和未来展望】

总结 0 前言1 YOLO与人工通用智能(AGI)2 YOLO作为“能够行动的神经网络”3 具身人工智能(EAI)4 边缘设备上的YOLO5 评估统计指标的挑战6 YOLO与环境影响 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YO…

数据结构4——栈和队列

目录 1.栈 1.1.栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2队列的实现 1.栈 1.1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为…

SSM搭建(1)——配置MyBatis

目录 一、框架概述 1.什么是JDBC? 2.JDBC基本流程 3.JDBC的缺点 二、MyBatis的入门程序 1. 创建数据库和表结构 2. MyBatis入门流程总结 3. MyBatis的入门步骤 (1) 创建maven的项目,创建Java工程即可。 &…

Stream API进行分组并收集某个属性到List

在Java中,使用Stream API进行分组并收集某个属性到List中是一种常见的操作。这可以通过Collectors.groupingBy和Collectors.mapping结合使用来实现。下面是一个具体的示例: 假设我们有一个Person类,其中包含name和age属性,我们想…

Zero to JupyterHub with Kubernetes上篇 - Kubernetes 离线二进制部署

前言: 纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 k8s二进…

阻塞式队列

目录 一、阻塞队列 阻塞队列的概念 生产者消费者模型 二、自定义实现阻塞队列 一、阻塞队列 阻塞队列的概念 队列我们并不默认,一提起队列,我们立马就能想到 "先进先出"的特性。 今天我们就来学习一下特殊的队列: 阻塞队列,它…

开发一套ERP 第八弹 RUst 插入数据

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…

剖析 SpringBoot 于夕阳红公寓管理系统架构搭建的核心作用

3 系统分析 本文作者在确定了研究的课题之后,从各大数字图书馆下载文献来阅读,并了解同类型的网站具备的大致功能,然后与本系统用户的实际需求结合进行分析,得出本系统要研究的具体功能与性能。虽然分析系统这一阶段性工作主要是确…

Oracle 插入数据的存储过程

Oracle 插入数据的存储过程 这是用来,把实时表里面的数据插入到某个表A获取到的字段neid,然后拼接成xxx_xxx_neid历史表,接着往里面插入数据 CREATE OR REPLACE PROCEDURE XXX自定义名 IS-- 定义变量v_ne_id_table_name VARCHAR2(100); …

30分钟学会正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…

电子应用设计方案-33:智能AI投影仪系统方案设计

智能 AI 投影仪系统方案设计 一、引言 随着科技的不断进步,投影仪在家庭娱乐、商务办公和教育培训等领域的应用越来越广泛。智能 AI 投影仪作为一种创新的投影设备,结合了人工智能技术,为用户带来更便捷、智能和个性化的使用体验。 二、系统…

【微服务】SpringBoot 对接飞书多维表格事件回调监听流程详解

目录 一、前言 二、前置准备 2.1 创建一个应用 2.2 准备一张测试使用的多维表 2.3 获取对接文档 2.4 工程中添加SDK 三、对接过程 3.1 配置Encrypt Key 和 Verification Token 3.2 配置订阅方式 3.3 添加事件 3.4 申请权限 3.5 编写订阅代码 3.6 订阅文档事件 3.7…

SpringBoot 项目中使用 spring-boot-starter-amqp 依赖实现 RabbitMQ

文章目录 前言1、application.yml2、RabbitMqConfig3、MqMessage4、MqMessageItem5、DirectMode6、StateConsumer:消费者7、InfoConsumer:消费者 前言 本文是工作之余的随手记,记录在工作期间使用 RabbitMQ 的笔记。 1、application.yml 使…