Oracle 字串拆分做條件方案

2021-09-24 17:38:08 字數 1164 閱讀 5766

一般oracle存過接受外部傳入的資料有兩種方式:

1、每個引數定義乙個入參變數

2、只定義乙個入參變數,外部所有引數都按照特定格式的字串傳給變數後,資料庫進行字串切分處理。

當然,作為乙個dba,我還是喜歡每個引數定義乙個入參變數,後期的擴充套件維護都比傳入字串強,當然缺點就是傳入引數不能太多,要是有十幾個的傳參就要定義十幾個變數,用起來也麻煩。

然而很不巧的是,我所在的公司的存過都是用的第二種方式,直接丟字串,所以維護這種事,鍋就是我的了。對於拆分字串成條件或者傳參的,也分兩種方式。

1、通過正則函式提取資料給到變數

2、通過寫乙個type方法,把傳入的字串拆分成陣列的形式,再迴圈遍歷呼叫

這些老的存過都有乙個統一的type方法去拆,具體實現這裡不寫了。因為今天擴充套件的時候用到的正則,所以寫下正則的使用;

oracle官方的正則文件:

文件中講的是所有正則的使用,拆分字串呢,用的是:

regexp_substr()

function regexp_substr(string, pattern, position, occurrence, modifier)

srcstr     :需要進行正則處理的字串

pattern    :進行匹配的正規表示式

position   :起始位置,從第幾個字元開始正規表示式匹配(預設為1)

occurrence :標識第幾個匹配組,預設為1

modifier   :模式('i'不區分大小寫進行檢索;'c'區分大小寫進行檢索。預設為'c')

一般情況來講,傳入的引數字串,都會有唯一的標識和切分點,比如我的:

'indata' =  regexp_substr(indata,'[^,]+',1)
上面這個呢就是按照如果傳參裡面有indata和我資料的indata相等返回true,這當然只是當作where條件用,但卻是可以實現字串拆分。詳細使用方法建議研究官方文件,我沒有好的例子也沒辦法好的舉例。

注意:indata =  regexp_substr(indata,'[^,]+',1)中

regexp_substr函式返回值是給定的字串,如果有便返回給定字串值,如果沒有便返回空,所以可以通過給定資料 = regexp_substr()的形式判斷我所給的資料是否存在於字段中

Oracle 拆分字串

create or replace function splitstr p string in varchar2,p delimiter in varchar2 return str split pipelined as v length number length p string v start...

oracle拆分字串

create or replace type array string is table of varchar2 2000 create or replace function f split string 拆分字串 author zhaohuihua i src in varchar2,待拆分的字...

oracle拆分字串

procedure hand mid sys bpm use role iorgtype in bpm compsite user.orgtype type,idate in date is v orgtype bpm compsite user.orgtype type iorgtype v id...