云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

轻量服务器_安阳企业网站建设_排行榜

小七 141 0

大家好,

今天我在这里快速向大家展示一种有用的技术,它可以像在ABAP中一样在SQLScript中生成循环(基于索引的单元访问)。对于那些"HANA初学者"和从/到有困难的人,我想说的是,平销返利,在大多数情况下,数据量很小,这将是很好的,主要是对于那些你需要在和/或其他少数情况下创建寄存器…

请记住,这种技术对大量数据的性能有不良影响,应作为一个例外,并在特定情况下使用的DML/DQL不是够了…

尽可能把你的逻辑放在DQL/DML语句上,因为HANA有以最佳方式处理数据的引擎,而且要快得多…

最初,对于最常见的循环方式,我很难在简单的文本中找到替代方法:光标和带偏移量的选择。

让我们开始:

假设我们有一个工资表,我们想给10年或10年以上雇佣的员工加薪20%,10%的员工是10年前雇佣的…下表显示:

如果我们正在开发一个ABAP,数据分析工具有哪些,我会这样做(我假设这个表已经创建并填充):

我们如何将上面的代码转换成HANA SQLScript过程?

使用匿名块,我们可以直接将一个SQLSCript编码到HANA的SQL控制台中…

重要说明:下面的所有代码都是用1.0版SPS12(1.00.122.15.1516128271)编写的

从HANA 2.0版SPS00开始,而不是这样:

您可以使用operator RECORD\u COUNT,为了以更新和现代的方式完成同样的"老派"任务:

另一个重要的说明是,代码中有些地方您将无法直接使用基于索引的单元格访问,例如WHERE子句等。对于这些场景,您可以将表格单元格分配给一个变量,然后在需要时使用该变量。

执行上述代码后,结果如下:

谢谢,下一篇文章再见!

另请注意,如果您希望在SAP HANA中复制上述测试,物联网是学什么的,以下是一些代码,以使操作更简单,以防万一?

*******************************SQL DDL/DML**********************************

创建表"S0003358391"("ID"整数CS\u INT,"名称"NVARCHAR(30),"部门"NVARCHAR(30),"雇用日期"日期,"工资"小数点(15,2),主键("ID"))卸载优先级5自动合并

插入"S0003358391."PAYROLL"值(1,'JOHN',物联网断路器,'SALES','20170101',10000);在"S0003358391"中插入"PAYROLL"值(2,'LEONARDO','SALES','19700101',50000);在"S0003358391"中插入"PAYROLL"值(3,'WILLIAM','IT','19800101',5000);在"S0003358391"中插入"PAYROLL"值(4,'ALLAN','IT','19900101',45000);在"S0003358391"中插入"PAYROLL"值(5,'FABIO','IT','20000101',30000);在"S0003358391"中插入"工资单"值(6,'MARCELO','MARKETING','20150101',45000);在"S0003358391"中插入"工资单"值(7,'ANDRE','MARKETING','20150101',35000);在"S0003358391"中插入"工资单"值(8,'VIVIAN','RH','20140101',30000);在"S0003358391"中插入"PAYROLL"值(9,企业软件正版化,'PAULA','RH','20140101',30000);在"s003358391"中插入"PAYROLL"值(10,'MACIEL','IT','20180101',30000);

您可以将架构"s003358391"替换为与您的用户或您的任何首选项对应的架构

***************************************SQLSCRIPT CODE***************************DO

BEGIN

declare v\u years integer;

declare v\u count integer;

声明v\u i整数;

sel1=select*from"s003358391"."PAYROLL"order by hire\u date;

select count(*)into v\u count from:sel1;

for v\u i in 1..v\u count do

if(months\u between(:sel1.hire\u date[v\u i],to\u date(now())/12)>=10然后

sel1.salary[v\u i]=:sel1.salary[v\u i]+(:sel1.salary[v\u i]*0.2);

else

sel1.salary[v_i]=:sel1.salary[v_i]+(:sel1.salary[v_i]*0.1);

end if;

end for;

upsert"S0003358391"."PAYROLL"select*from:sel1;