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是一样的
完成。