資料庫操作通常需要將字串拆分為單獨的行。 Oracle 提供了有效的方法(尤其是在 10g 及更高版本中)來管理此任務。
一種簡單而強大的技術採用正規表示式和 connect by
子句。這涉及到建立臨時表並使用正規表示式函數提取子字串:
<code class="language-sql">with temp as ( select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual union all select 109, 'test2', 'Err1' from dual ) select distinct t.name, t.project, trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error from temp t, table(cast(multiset(select level from dual connect by level <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels;</code>
temp
CTE(通用表表達式)模擬樣本資料。 length(regexp_replace(t.error, '[^,] ')) 1
透過計算逗號分隔值來決定錯誤數量。 select level from dual connect by level <= ...
產生從 1 到錯誤計數的數字序列。 table(cast(multiset(...) as sys.OdciNumberList))
將數字序列轉換為可用的集合。 temp
與數字集合結合起來,創建所有必要的組合。 trim(regexp_substr(t.error, '[^,] ', 1, levels.column_value))
使用產生的數字作為位置指示符來提取每個錯誤。 此方法有效地將具有多個值的字串拆分為單獨的行,同時保持資料完整性。
以上是Oracle中如何有效率地將字串拆分為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!