我的SAP HANA SQL控制台中有一个SQL脚本,行数约1700。 我有很多行,因为我需要更改从一个“原始表”导入的一列中的很多条目。 More detailed description about this "change row entries" problem 重复的WHEN THEN代码如下:`
Create Column Table xxx
Select Distinct
aaa AS "aaa",
bbb AS "bbb",
ccc AS "ccc",
CASE
WHEN importedColumn like 'xx123x' THEN REPLACE_REGEXPR ('xx123x' FLAG 'i' IN importedColumn WITH 'xxx')
WHEN importedColumn like 'yy345y' THEN REPLACE_REGEXPR ('yy345y' FLAG 'i' IN importedColumn WITH 'yyy')
WHEN importedColumn like 'zzz345z' THEN REPLACE_REGEXPR ('zzz345z'FLAG 'i' IN importedColumn WITH 'zzzz')
etc.
etc.
ELSE xxx
END AS replace_regexpr
FROM...
WHERE...
(通常)可以正常工作。 问题是,我有太多不同的WHEN THEN语句(总是检查这一列的条目并可能更改它们),以致我无法执行代码了-> SQL console内容太大。 我可以以某种方式提取此case语句并将其存储在过程或类似的东西中吗? 我真的不知道该如何处理,因此我很乐意为您提供建议!
答案 0 :(得分:1)
从这个和所链接的问题中,我认为,只有且仅当找到特定模式(通过LIKE
运算符比较)时,您才应将一个REGEX规则应用于输入数据。
我将所有匹配的模式和替换规则放在一个单独的表中,从而使维护,调试和SELECT语句更加容易:
create column table xxx (id int primary key
, "impColumn" nvarchar(4000)
);
create column table rules (id int primary key
, matcher nvarchar(4000)
, regex nvarchar(4000));
insert into rules values (1, 'xx123x', 'xxx');
insert into rules values (2, 'yy345y', 'yyy');
insert into rules values (3, 'zzz345z', 'zzz');
insert into xxx values (1, 'xx123x');
insert into xxx values (2, 'yy345y');
insert into xxx values (3, 'zzz345z');
insert into xxx values (4, 'xx123xyy345y');
insert into xxx values (5, 'xx1zzz345zzzz345z23x');
insert into xxx values (6, 'xx123xyy345yzzz345z');
select
x.*,
r.*,
REPLACE_REGEXPR (r.matcher
FLAG 'i'
IN x."impColumn"
WITH r.regex) as output
from
xxx x
left outer join
rules r
on x."impColumn" like r.matcher ;
您可以将加入条件更改为 在x。“ impColumn”上,如'%'|| r.matcher ||'%'
将所有匹配的规则应用于输入行,但是请注意,这会为每个应用的规则生成一个输出行,这可能不是您想要的。
不带占位符的输出如下所示:
您的示例SQL产生的内容几乎相同。
对于SAP HANA Studio中的问题,我猜测,这是由于您尝试运行的脚本文件很大。 通过为HANA Studio编辑JRE VM内存,您可以避免此问题。
请检查hdbstudio.ini
并将VM参数设置为
-Xmx4096m
-Xms512m
,然后重新启动HANA Studio。