![](/img/trans.png)
[英]Oracle PLSQL : How to use substitution variable based on each value?
[英]How to use a fetched value in INSTR in Oracle PLSQL
我正在嘗試創建一個結合兩個表 A 和 B 來獲取數據的視圖。 此視圖的主要 function 是解碼 A 在其列之一中的值
Name~LastName~DOB~placeofBirth
如我們所見,字符串由~分隔,特殊字符~在表 B 中,但也已編碼。
&~*+
我的任務是從表 B 中獲取第二個字符,然后將其用於將 A 中的值分隔為單個值。 由於我們不能在視圖中聲明變量,我可以在哪里存儲〜字符以將其與值進行比較
以下是我嘗試做的事情的示例,這給了我錯誤
SELECT
Substr(B.SpecialCharecterss,2,1) Delimiter,
SUBSTR(A.CodedString,1, INSTR(A.CodedString, Delimiter, 1, 1) -1) , //Throws error here
// Similarly other fields
您可以使用regexp_substr()
來做到這一點:
select regexp_substr(coded_string,
replace('[^X]+', 'X', substr(chars, 2, 1)),
1, 2)
from (select 'Name~LastName~DOB~placeofBirth' as coded_string, '&~*+' as chars from dual) b
最后一個參數是您想要coded_string
中的哪個字段。
一種選擇是使用公用表表達式:
WITH cteDelimiter AS (SELECT Substr(B.SpecialCharecterss,2,1) AS Delimiter
FROM B)
SELECT SUBSTR(A.CodedString, 1, INSTR(A.CodedString, d.Delimiter, 1, 1) - 1)
FROM A
CROSS JOIN cteDelimiter d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.