oralce 預存程序中如何調用java sources

來源:互聯網
上載者:User

 

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是一樣的

完成。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.