一般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...