- 具體場景:在動态SQL中,我們需要把一段字元加工為我們所需要的SQL,這裡舉個例子,目前台傳入字元為 ‘a,b,c,d’ ,需要把該字元加工為 (‘a’,‘b’,‘c’,‘d’) ,作為in語句的條件才能使用。知道了怎麼拆分和拼接,就有了思路,其他場景的分割和拼接也就好做了。
- 拆分并加工拼接SQL:
--輸入 'a,b,c,d'
--輸出 ('a','b','c','d')
FUNCTION splitAndHandleStr(
piStr IN varchar2, --需要加工的字元串
piSymbol IN varchar2 --用來做分割的字元
) Return Varchar2
IS
outStr varchar2(200);--輸出字元
surplusStr varchar2(200);--剩餘字元
idx int;--分割符的位置标記
cutStr Varchar2(200);--截取分割位置前的字元
handleStr Varchar2(200);--拼接處理字元
Begin
surplusStr := piStr;
--當剩餘字元裡沒有分割符時跳出循環
While inStr(surplusStr,piSymbol) <> 0 Loop
idx := inStr(surplusStr, piSymbol);
cutStr := subStr(surplusStr, 1, idx - 1);
handleStr := handleStr || '''' || cutStr || ''',' ;
surplusStr := subStr(surplusStr, idx+1, length(surplusStr) - (length(cutStr)+1));
End Loop;
--當跳出循環後,如果剩餘字元不為空,說明還有字元,需進行拼接處理
If is_not_null(surplusStr) = 1 And surplusStr <> piSymbol Then
handleStr := handleStr || '''' || surplusStr || ''',';
End iF;
--移除最後逗号,加工成最終輸出資料
outStr := '(' || SubStr(handleStr, 1, Length(handleStr)-1) || ')';
Return outStr;
End;