首页 > 解决方案 > SQL - SAP HANA - 控制台内容长 - 将一些代码传递给过程?

问题描述

我的 SAP HANA SQL 控制台中有一个大约 1700 行的 SQL 脚本。我有这么多行,因为我需要在从一个“原始表”导入的一列中更改很多条目。有关此“更改行条目”问题的更详细描述 重复的 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 控制台内容太大。我可以以某种方式提取这个 case 语句并将其存储在一个过程或类似的东西中吗?我真的不知道如何处理这个问题,所以我很高兴收到每一个建议!

标签: sqlhana

解决方案


从这个和链接的问题中,我认为您有一个单一的 REGEX 规则,当且仅当找到某个模式时(通过运算符比较),该规则应该应用于输入数据LIKE

我会将所有匹配的模式和替换规则放入一个单独的表中,从而使维护、调试和 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  ;

您可以将连接条件更改为 on x."impColumn" like '%'|| r.matcher ||'%'

将所有匹配规则应用于输入行,但请注意,这会为每个应用的规则生成一个输出行,这可能不是您想要的。

没有占位符的输出如下所示:

在此处输入图像描述

这与您的示例 SQL 产生的几乎相同。

至于 SAP HANA Studio 中的问题,我这是由于您尝试运行的脚本文件的大小。通过为 HANA Studio 编辑 JRE VM 内存,您或许可以避免此问题。

请检查hdbstudio.ini并将VM参数设置为

  • -Xmx4096m
  • -Xms512m

并重新启动 HANA Studio。


推荐阅读