兩個(gè)Oracle存儲(chǔ)過(guò)程程序分享
來(lái)源:易賢網(wǎng) 閱讀:1228 次 日期:2015-08-28 17:24:56
溫馨提示:易賢網(wǎng)小編為您整理了“兩個(gè)Oracle存儲(chǔ)過(guò)程程序分享”,方便廣大網(wǎng)友查閱!

為了解決日常工作中的問(wèn)題,再加上好久沒(méi)有寫(xiě)程序,利用這個(gè)周末的時(shí)間寫(xiě)了如下的存儲(chǔ)過(guò)程或函數(shù),公布于此處,希望能對(duì)大家寫(xiě)這一類的程序有所啟發(fā)。大家對(duì)寫(xiě)程序可能有一個(gè)誤區(qū),有些人常說(shuō):你看我什么語(yǔ)言都會(huì),比如說(shuō)C,C++,VB,perl,shell,其實(shí)語(yǔ)言的本身并不重要,重要的還是在算法上,置于語(yǔ)法,用時(shí)去查一下就可以了。

第一個(gè)存儲(chǔ)過(guò)程,屬性串替換函數(shù),常用于數(shù)據(jù)訂正過(guò)程中(使用oracle提供的replace函數(shù)會(huì)有問(wèn)題)

create or replace function sp_replace_property_value(v_ch varchar2,v_from varchar2,

v_to varchar2) return varchar2

/*

creator:danchen

create_time:2008-4-19

function:replace taobao' property name and property value id as group

v_ch 屬性串;v_from 源屬性; v_to 目標(biāo)屬性,目標(biāo)屬性可為空,則變成刪除屬性

*/

as

--定義返回的返回的屬性字符串

result_v varchar2(200):='';

--定義剩余屬性字符串變量

temp_v varchar2(200):='';

--定義分號(hào)位置

fenhao_address number;

--定義臨時(shí)屬性對(duì)變量

v_pv varchar2(20);

begin

if v_ch is null or v_from is null then

return 'error';

end if;

if instr(v_ch,':') = 0 or instr(v_from,':')= 0 then

return 'error';

end if;

temp_v := v_ch;

loop

fenhao_address := instr(temp_v,';');

if fenhao_address=0 then

--沒(méi)有找到分號(hào),則為最后一組屬性名:屬性值

v_pv := temp_v;

--檢查屬性是否是要替換的屬性

if v_pv != v_from then

result_v := result_v||';'||v_pv ;

else

if v_to is not null then

result_v := result_v||';'||v_to;

end if;

end if;

--跳出循環(huán)

exit;

else

--取出屬性對(duì)

v_pv := substr(temp_v,1,instr(temp_v,';')-1);

--檢查屬性是否是要替換的屬性

if v_pv != v_from then

result_v := result_v||';'||v_pv ;

else

if v_to is not null then

result_v := result_v||';'||v_to;

end if;

end if;

--得到剩余的屬性對(duì)

temp_v := substr(temp_v,instr(temp_v,';')+1);

end if;

end loop;

--對(duì)結(jié)果進(jìn)行處理,去掉最左側(cè)的分號(hào)

if substr(result_v,1,1)=';' then

result_v := substr(result_v,2);

end if;

--返回結(jié)果

return result_v;

end sp_replace_property_value;

第一個(gè)存儲(chǔ)過(guò)程使用示例:

SQL> select sp_replace_property_value('33392:118167;33393:107054;33391:118167','33393:107054','') from dual;

SP_REPLACE_PROPERTY_VALUE('33392:118167;33393:107054;33391:118167','33393:107054

--------------------------------------------------------------------------------

33392:118167;33391:118167

SQL> select sp_replace_property_value('33392:118167;33393:107054;33391:118167','33393:107054','33393:100') from dual;

SP_REPLACE_PROPERTY_VALUE('33392:118167;33393:107054;33391:118167','33393:107054

--------------------------------------------------------------------------------

33392:118167;33393:100;33391:118167

第二個(gè)存儲(chǔ)過(guò)程,檢查相關(guān)屬性對(duì)在目標(biāo)屬性串是否存在,常用于select查詢語(yǔ)句(使用oracle提供的like查詢會(huì)不準(zhǔn)確)

create or replace function sp_exist_property(v_strpv varchar2,v_pv varchar2) return number

/*

creator:danchen

create_time:2008-4-20

function:檢查v_pv在屬性串v_strpv中是否全部存在

*/

as

type t_pvs is table of varchar2(50);

--保存分解后v_strpv

v_pvs t_pvs:=t_pvs();

--保存分解后v_pv

s_pvs t_pvs:=t_pvs();

--定義剩余屬性字符串變量

last_pvs varchar2(200):='';

--臨時(shí)屬性變量

temp_pv varchar2(50);

--定義分號(hào)位置

fenhao_address number;

--定義比較結(jié)果,0不存在;1存在

v_check number;

v_result number;

begin

if (v_strpv is null) or (v_pv is null) then

return -1;

end if;

if instr(v_strpv,':')=0 or instr(v_pv,':')=0 then

return -2;

end if;

更多信息請(qǐng)查看數(shù)據(jù)庫(kù)
易賢網(wǎng)手機(jī)網(wǎng)站地址:兩個(gè)Oracle存儲(chǔ)過(guò)程程序分享
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)