oracle 常用自定義函式

2021-07-31 07:12:58 字數 4609 閱讀 4574

create or replace function find_in_set(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')

return number is

l_idx number:=0; -- 用於計算piv_str2中分隔符的位置

str varchar2(500); -- 根據分隔符擷取的子字串

piv_str varchar2(4000) := piv_str2; -- 將piv_str2賦值給piv_str

res number:=0; -- 返回結果

begin

-- 如果piv_str中沒有分割符,直接判斷piv_str1和piv_str是否相等,相等 res=1

if instr(piv_str, p_sep, 1) = 0

then

if piv_str = piv_str1 then

res:= 1;

endif;else

-- 迴圈按分隔符擷取piv_str

loop

l_idx := instr(piv_str,p_sep);

-- 當piv_str中還有分隔符時

if l_idx > 0

then

-- 擷取第乙個分隔符前的字段str

str:= substr(piv_str,1,l_idx-1);

-- 判斷 str 和piv_str1 是否相等,相等 res=1 並結束迴圈判斷

if str = piv_str1 then

res:= 1;

exit;

endif; piv_str := substr(piv_str,l_idx+length(p_sep));

else

-- 當擷取後的piv_str 中不存在分割符時,判斷piv_str和piv_str1是否相等,相等 res=1

if piv_str = piv_str1 then

res:= 1;

endif; -- 無論最後是否相等,都跳出迴圈

exit;

endif;end

loop;

-- 結束迴圈

endif;

-- 返回res

return res;

end find_in_set;

create or replace function checks2(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')

return number is

l_idx number:=0; -- 用於計算piv_str1中分隔符的位置

str varchar2(500); -- 根據分隔符擷取的子字串

piv_str0 varchar2(4000) := piv_str1; -- 將piv_str1賦值給piv_str0

piv_str varchar2(4000) := piv_str2; -- 將piv_str2賦值給piv_str

res number:=0; -- 返回結果

begin

-- 如果piv_str中沒有分割符,直接判斷piv_str1和piv_str是否相等,相等 res=1

if instr(piv_str, p_sep, 1) = 0

and instr(piv_str0, p_sep, 1) = 0

then

if piv_str0 = piv_str then

res:= 1;

endif;else

if (piv_str0 is

not null) then

loop

str:='';

mx_splitstring(piv_str0,',',str);

if str is

not null then

if find_in_set(str,piv_str)>0

then

res:=1;

return res;

endif; end

if; exit

when piv_str0 is null;

endloop;

endif;/*

-- 迴圈按分隔符擷取piv_str

loop

l_idx := instr(piv_str0,p_sep);

-- 當piv_str中還有分隔符時

if l_idx > 0

then

-- 擷取第乙個分隔符前的字段str

str:= substr(piv_str0,1,l_idx-1);

res:= find_in_set(str, piv_str2);

if res > 0

then

exit;

endif; piv_str0 := substr(piv_str0,l_idx+length(p_sep));

-- else

-- 當擷取後的piv_str 中不存在分割符時,判斷piv_str和piv_str1是否相等,相等 res=1

-- if piv_str0 = piv_str1 then

-- res:= 1;

-- end

if; -- -- 無論最後是否相等,都跳出迴圈

-- exit;

endif;end

loop;

-- 結束迴圈

*/end

if;-- 返回res

return res;

end ;

create or replace function checks_all_in(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')

return number is

l_idx number:=0; -- 用於計算piv_str1中分隔符的位置

str varchar2(500); -- 根據分隔符擷取的子字串

piv_str0 varchar2(4000) := piv_str1; -- 將piv_str1賦值給piv_str0

piv_str varchar2(4000) := piv_str2; -- 將piv_str2賦值給piv_str

res number:=1; -- 返回結果

begin

-- 如果piv_str中沒有分割符,直接判斷piv_str1和piv_str是否相等,相等 res=1

if instr(piv_str, p_sep, 1) = 0

and instr(piv_str0, p_sep, 1) = 0

then

if piv_str0 = piv_str then

res:= 1;

endif;else

if (piv_str0 is

not null) then

loop

str:='';

mx_splitstring(piv_str0,',',str);

if str is

not null then

if find_in_set(str,piv_str)<=0

then

res:=0;

return res;

endif; end

if; exit

when piv_str0 is null;

endloop;

endif;/*

-- 迴圈按分隔符擷取piv_str

loop

l_idx := instr(piv_str0,p_sep);

-- 當piv_str中還有分隔符時

if l_idx > 0

then

-- 擷取第乙個分隔符前的字段str

str:= substr(piv_str0,1,l_idx-1);

res:= find_in_set(str, piv_str2);

if res > 0

then

exit;

endif; piv_str0 := substr(piv_str0,l_idx+length(p_sep));

-- else

-- 當擷取後的piv_str 中不存在分割符時,判斷piv_str和piv_str1是否相等,相等 res=1

-- if piv_str0 = piv_str1 then

-- res:= 1;

-- end

if; -- -- 無論最後是否相等,都跳出迴圈

-- exit;

endif;end

loop;

-- 結束迴圈

*/end

if;-- 返回res

return res;

end ;

Oracle自定義函式

語法如下 create or replace function function name argment type,argment type return return type 返回資料的型別 變數的申明,比如 stryuan varchar2 150 begin function body 函...

oracle 自定義函式

下面是乙個前輩寫的判斷是否是手機號的函式 create or replace function ismobile pmsg varchar2 return number isvprefix varchar2 20 vlen number begin vlen lengthb pmsg if vlen...

Oracle自定義函式

二 刪除自定義函式 三 應用經驗 在oracle資料庫中,為了實現特定的功能,可以自定義函式,就像c c 語言,除了系統的庫函式,程式設計師還會編寫很多自定義的函式。create or replace function 函式名 引數1 模式 資料型別,return 資料型別 as 定義區域性變數。變...