sql - 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 语句并将其存储在一个过程或类似的东西中吗?我真的不知道如何处理这个问题,所以我很高兴收到每一个建议!
- 注意:需要更改的列条目没有任何共同的模式,所以我无法将它们分组或类似的东西。这意味着我需要那么多的 WHEN THEN 语句。
解决方案
从这个和链接的问题中,我认为您有一个单一的 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。
推荐阅读
- python-3.x - 在自己的图像上测试网络
- php - 在 Laravel 5.7 中合并具有多个键的集合
- typescript - 如何为客户端转译打字稿
- c# - 第一次调用异步等待仍然有错误 IEnumerable
不包含 GetAwaiter 的定义 - algorithm - 如何为多人游戏随机创建一个公平的迷宫?
- php - 如何使用多个标签快速搜索帖子/列表?
- c# - 将网络开始位置添加到游戏对象后如何修复触发器
- indexing - Dspace 作者索引不敏感的口音
- android - 从 Google fit API 获取睡眠数据
- angular - 如何在模板驱动的表单中为 ngModelGroup 添加自定义验证