SQL-SAP HANA-控制台内容太长-将一些代码传递给过程吗?

时间:2018-11-29 13:50:30

标签: sql hana

我的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语句并将其存储在过程或类似的东西中吗? 我真的不知道该如何处理,因此我很乐意为您提供建议!

  • 注意:需要更改的列条目没有任何通用模式,因此我无法对它们进行分组或类似的操作。这意味着我需要很多WHEN THEN语句。

1 个答案:

答案 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 ||'%'

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

不带占位符的输出如下所示:

enter image description here

您的示例SQL产生的内容几乎相同。

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

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

  • -Xmx4096m
  • -Xms512m

,然后重新启动HANA Studio。