[英]SQL - SAP HANA - Console Content to long - Pass some code to a procedure?
我的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 console內容太大。 我可以以某種方式提取此case語句並將其存儲在過程或類似的東西中嗎? 我真的不知道該如何處理,因此我很樂意為您提供建議!
從這個問題和鏈接的問題中,我認為您只有一個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 ;
您可以將連接條件更改為x。“ impColumn”,例如'%'||。 r.matcher ||'%'
將所有匹配的規則應用於輸入行,但是請注意,這會為每個應用的規則生成一個輸出行,這可能不是您想要的。
沒有占位符的輸出如下所示:
您的示例SQL產生的結果幾乎相同。
至於SAP HANA Studio中的問題,我想這是由於您嘗試運行的腳本文件的大小所致。 通過為HANA Studio編輯JRE VM內存,您可以避免此問題。
請檢查hdbstudio.ini
並將VM參數設置為
-Xmx4096m
-Xms512m
並重新啟動HANA Studio。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.