使用literal或者绑定变量执行SAP HANA SQL语句-阿里云开发者社区

开发者社区> jerrywangsap> 正文

使用literal或者绑定变量执行SAP HANA SQL语句

简介: 使用literal或者绑定变量执行SAP HANA SQL语句
+关注继续查看

There are two variants of SQL statement execution defined in SAP note 2000002 – FAQ: SAP HANA SQL Optimization. The difference is how the where condition is specified in SQL Statement.

Sometimes I prefer to call “Literals” as “Hard code”.


image.png


And for Bind variables, it means the where condition is unknown in compile time, but bound to a variable filled by application logic in the runtime. A typical example:


image.png


A caution in SAP note:

It can make a significant difference in terms of execution plan, performance and resource consumption if a SQL statement is executed with explicit literals or with bind variables. Therefore it is recommended that you analyze an expensive SQL statement that uses bind variables in the same way, i.e. also with bind variables.


See a real case to understand it.

I wrote the following report to search all Service Orders whose header “description” field contains specified key word.

image.png

This report uses CRM BOL API to delegate the query to database layer, which finally executes the following SQL statement.


image.png


This execution belongs to “Bind variables” variant.


As a result, if we would like to paste the SQL statement from ABAP to HANA Studio, we should ensure we have pasted the “correct style” of SQL statement.


Wrong approach

Find statement from Edit->Display Execution Plan->For Recorded Statement:


image.png


If you simply paste the following SQL statement into HANA Studio and execute it there, you actually failed to 100% simulate the ABAP SQL statement’s execution detail in HANA Studio.


The reason is: the SQL statement in ABAP has “Bind variables” variant, and the statement you paste below has “Literals” variant instead: pay attention to the area highlighted in blue below.

image.png



Correct approach

You can use this menu instead to get the appropriate SQL statement to be pasted:


Check the where condition which now has “Bind variables” variant. The variables here have been marked using “?” as placeholder.


Execute it in HANA Studio and there is a new tab “Prepared SQL” displayed. You should fill the actual value for each variable now. Choose “Add Parameter Values” from context menu:


and paste the following string into input field in popup dialog:

504,BUS2000116,BUS2000116,BUS2000140,BUS2000105,BUS2000137,BUS2000131,BUS2000146,BUS2000159,BUS2000153,BUS2000199,Y,%2017-12-21%,SRVO,100


Now each parameter has been automatically filled with corresponding value:


Execute SQL statement in HANA Studio. In this way, it has the same performance result as executed in SAPGUI.


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9485 0
使用SQLCMD在SQLServer执行多个脚本
原文: 使用SQLCMD在SQLServer执行多个脚本 概述:          作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个sql文件,并且有执行顺序,如我现在工作的公司,十几个客户,每个客户一个库,但是数据库结构、存储过程、视图等都是一模一样,每次执行脚本(以下称为升级),如果有一百个脚本,那么就要按顺序执行过千次,这种工作量可不是一个人能承受得了的。
824 0
使用literal或者绑定变量执行SAP HANA SQL语句
使用literal或者绑定变量执行SAP HANA SQL语句
13 0
MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的。 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命令查看了当前正在执行的sql语句,从而定位到了对应的程序,发现代码中有一个死循环在不停的查询导致cpu占用99%,原因找到了问题就好解决了。
3423 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13168 0
解决SSH登录用户执行的命令部分环境变量参数不生效的问题
问题概况 linux机器在/etc/profile配置完成环境变量后,SSH到目标机器执行命令,但是获取不到已配置的环境变量值。 例如场景: 在/etc/profile配置了http代理 export all_proxy=http://$PROXY_HOST:8118 export ftp_pr...
1381 0
windows下使用SQLPLUS制作BAT执行SQL文件
假如你把需要的SQL操作信息等均放入到一个SQL文件中,需要制作一个bat文件来执行这个sql文件,那么你的bat文件中,在sqlplus登录语句后的信息不能换行,换行的话则执行登录sqlplus后就不再运行后面的命令。
831 0
SQL使用链接服务器执行远程数据库上的存储过程
原文:SQL使用链接服务器执行远程数据库上的存储过程   --创建链接服务器 exec sp_addlinkedserver'server_tmp','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin'server_tmp','fa...
1184 0
MySQL之在储存过程中使用表名为变量
  我们知道,在MySQL的储存过程中,一般的输入参数为各种数据类型,如数值型,字符型等。那么,能不能让输入参数等于表名呢?答案是肯定的,那就是使用MySQL提供的PREPARE语法。
953 0
+关注
2628
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载