1.在java sources中建立一個類,代碼如下:
create or replace and compile java source named ParseStr as
public class ParseStr
{
public static String parse(String search,String info){
String result ="你需要尋找的資料不存在!!!";
//status=DELIVRD&spid=657&mobile=13566678899&linkid=sfdsf122121212&msg=ADSFVS12123&port=106677888&fee=200
if(info != null){
String[] strs =info.split("&");
label:
for (int i = 0; i < strs.length; i++) {
//System.out.println(strs[i]);
String[] temps = strs[i].split("=");
if(temps != null){
for (int j = 0; j < temps.length; j++) {
//System.out.println(temps[j]);
if(j< temps.length-1 && search.trim().equals(temps[j])){ //不是最後一位,並且值是相等的。
result = temps[j+1];
break label;
}
}
}
}
}
return result;
}
}
2.建立function調用java sources,代碼如下:
create or replace function FUNC_PARSE_STR(pra varchar2, info varchar2)
return varchar2 as
LANGUAGE JAVA NAME 'ParseStr.parse(java.lang.String,java.lang.String) return java.lang.String';
3.在預存程序中調用函數,代碼如下:
CREATE OR REPLACE PROCEDURE "PROC_APP_SYNC_DATA_DEAL" (
--業務名:通道同步資料儲存介面
--對同步過來的資料細化同步
v_ip in varchar2, --同步資料的主機IP地址
v_paramStr in varchar2, --同步參數的字串
v_flag out varchar2 --輸出標誌
)
IS
--變數定義
v_ERR_CODE varchar2(255); --錯誤碼
v_ERR_MSG varchar2(255); --錯誤資訊
--v_exist number;
v_result varchar2(100);
v_pra varchar2(20);
BEGIN
insert into TKCM_TEMP_SMS_DATA values(tkcm_temp_sms_data_id_seq.nextval,v_ip,v_paramStr,sysdate);
commit;
-- 需要解析的字串:
-- status=DELIVRD&spid=657&mobile=13566678899&linkid=sfdsf122121212&msg=ADSFVS12123&port=106677888&fee=200
--需要得到的值有:status,mobile,linkid,msg,port
v_pra:='status';
v_result:=func_parse_str(v_pra,v_paramStr);
dbms_output.put_line('status對應的值是:'||v_result);
v_flag :='PROC_APP_SYNC_DATA_DEAL_OK';
return;
EXCEPTION
WHEN OTHERS THEN ROLLBACK;
v_flag :='PROC_APP_SYNC_DATA_DEAL_FAIL';
v_ERR_CODE:=concat(SQLCODE,2);
v_ERR_MSG:='PROC_APP_SYNC_DATA_DEAL'||SQLERRM;
insert into proc_error values(proc_error_id_seq.nextval,v_ERR_CODE,v_ERR_MSG,SYSDATE);
COMMIT;
END;
可以使用調試的手段去測試,得到的結果是否正確。
如何使用:
a、選中預存程序的名稱,右鍵--->test,在對話方塊中輸入相應的內容
b、單補測試,和java debug是一樣的
完成。