国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

關于Oracle存儲過程測試

2024-08-29 13:32:24
字體:
來源:轉載
供稿:網友

  常規方式保存測試信息

  創建相關數據表

  創建數據表testinfolog,和序列號seq_testinfolog

  參考當前目錄下的 testinfolog.sql ,運行這部分腳本。

  創建測試信息保存包

  創建一個測試信息保存的 package

  參考當前目錄下的 pkg_test_info.pck,編譯這個包。

  具體例子

  例子1

  在一個pl/sql塊中使用測試包來保存測試信息,參考當前目錄下的 example1.sql

  -- 簡單使用的一個例子,結果查詢select * from testinfolog
  declare
  i integer :=1;
  begin
  pkg_test_info.clearallloginfo;
  pkg_test_info.setlogcontext('匿名塊測試','無',1);
  pkg_test_info.loginfo('i=1');
  pkg_test_info.loginfo('當前日期='||to_char(sysdate,'yyyy-mm-dd'));
  end;

  例子2

  在一個存儲過程中保存測試信息

  參考當前目錄下的test_pkg_test_info.prc

  ---在存儲過程中保存測試信息,結果查詢 select * from testinfolog

  create or replace procedure test_pkg_test_info(p_param1 int,
  p_param2 int,
  p_保存日志信息 int default 1) is
  begin
  if(p_保存日志信息)=1 then
  pkg_test_info.clearallloginfo;
  pkg_test_info.setlogcontext('存儲過程測試', 'test_pkg_test_info', 1);
  
  pkg_test_info.loginfo('p_param1='||to_char(p_param1)||',p_param2='
  ||to_char(p_param2));
  end if;
  end ;

  卸載腳本

|||

  參考 uninsall.sql ,如果需要卸載運行這個腳本

  其它的方式保存測試信息

  log4plsql的介紹

  log4plsql是一個open source的工具,是一個在oralce pl/sql 下實現的log框架。

  log4plsql 是基于log4j 演化得來的。

  相關站點

  http://log4plsql.sourceforge.net/

  http://sourceforge.net/projects/log4plsql/

  log4plsql來做測試。

  1.觸發器的測試信息保存

  1個觸發器的例子,在觸發器中記錄相關信息

  代碼位于當前文件所在目錄的 log_dml.sql

  create or replace trigger log_dml before
  insert or update or delete
  on t_essais for each row
  begin
  if deleting or updating then
  plog.info('t_essais:old:'||user||':'||ld.data);
  end if;
  if inserting or updating then
  plog.info('t_essais:new:'||user||':'||:new.data);
  end if;
  end;

  2.存儲過程中測試信息保存

  在存儲過程中進行日志操作,把相關存儲過城的參數信息記錄到日志數據表

  代碼位于當前文件所在目錄的 testassert.sql

  create or replace procedure testassert(p_param1 int,p_param2 varchar2)

  is

  pctx plog.log_ctx;

  begin

  --如果 p_param1<=1,那相關信息就將寫入日志

  plog.assert(pctx, p_param1>1, 'p_param1>1 always false');

  --如果 p_param2<>'man',那相關信息就將寫入日志

  plog.assert(p_param2 = 'man', 'p_param2<> man ');

|||

  plog.assert(1 is null, '1 is null always false');

  plog.assert(not 1>1, 'not 1>1 never false');

  plog.assert(1>2, '1>2 always false', -20001,

  praiseexceptioniffalse=>true ,

  plogerrorreplaceerror=>false);

  plog.assert(1>3, 'never test there is a raise in previous assert');

  end;

  3.實現了樹型目錄的日志例子

  代碼位于當前文件所在目錄的 testassert2.sql

  /**
  * <p> purpose:這是一個在存儲過程過程通過日志方式進行記錄測試信息的例子,實現了樹型目錄的日志記錄方式
  * </p>
  * <p>
  * 使用方式
  * <li>編譯該存儲過程</li>
  * <li>
  * 刪除tlog表中的日志信息: delete from tlog
  * </li>
  * <li>測試該存儲過程
  * begin testassert2(10,'[email protected]');end;
  * </li>
  * <li>察看結果 select from tlog </li>
  *</p>
  * @param p_param1 是一個入口參數 ,它的值將被記錄進入 日志中
  * @param p_param2 是另外一個入口參數 ,它的值將被記錄進入 日志中
  ***/
  create or replace procedure testassert2(p_param1 int, p_param2 varchar2) is
  v_ctx plog.log_ctx;
  v_year varchar2(4);
  begin

  ---設置日志信息的根結點名稱

  v_ctx := plog.init('測試信息');

  ---構造樹型日志的第2級

  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • |||

      plog.setbeginsection(v_ctx, 'procedure_testassert2_測試信息');

      plog.setbeginsection(v_ctx, '檢測入口參數');

      --如果 p_param1<=1,那相關信息就將寫入日志

      plog.assert(v_ctx, p_param1 > 1, 'p_param1>1 always false');

      --如果 p_param2<>'man',那相關信息就將寫入日志

      plog.assert(p_param2 = 'man', 'p_param2 <> man ');

      ---關閉樹型日志的第2級目錄

      plog.setendsection(v_ctx, '檢測入口參數');

      ---下面是根據實際業務需要進行一序列處理

      null; ---這里是一些業務處理代碼

      ---end 相關實際業務處理

      ---檢查業務處理結果

      --構造又一個2級樹型日志目錄

      plog.setbeginsection(v_ctx, '檢查業務處理結果');

      ---這里是根據實際需要,對相關處理結果的檢查代碼

      select to_char(sysdate, 'yyyy') into v_year from dual;
      plog.assert(v_ctx,
      v_year = '2003',

      '當前年份應該是=2003,實際是=' || v_year);

      ---end 這里是根據實際需要,對相關處理結果的檢查代碼

      --關閉當前的樹型日志的第2級目錄

      plog.setendsection(v_ctx, '檢查業務處理結果');
      plog.setendsection(v_ctx, 'procedure_testassert2_測試信息');
      end;

      log4plsql的應用

      由于plog 提供了assert的處理,因此可以考慮在存儲過程和包中進行一些測試結果的檢查,根據需要把測試結果保存下來,對于一些基于算法的存儲過程的測試,可以考慮使用一些腳本來做一些自動化的回歸測試。

    |||

      應用例子

      1.說明:

      這個例子可能不能應用起來(沒有相關的數據庫環境,缺少相應的包),但是可以open一些腳本出來,來說明相關的表達意思。如果是公司內部,可以在福州項目數據庫下可以運行起來。

      2.參考文檔

      參考 帶申請的業主整合算法的測試,有申請,沒有產權閣樓,沒有產權分攤,不存在人口安置。

      相關存儲過程/包

      pkg_condebuginfo.normal_ownerreq_recursive

      plog包

      相關文檔

      參考《測試__帶申請的業主整合算法的測試.doc》

      測試數據的輸入,采用手工的方式輸入,根據需要也可以全部腳本生成。

      參考文檔《測試__帶申請的業主整合算法的測試.doc》列出的測試數據要求。

      測試數據的動態修改/生成,根據測試用例,動態改變/生成測試數據。

      參考 pkg_condebuginfo.normal_owner_updatedata3

      測試結果的檢查

      參考 pkg_condebuginfo.normal_owner_check_data3

      擴展

      為了基于pl/sql的測試信息做的更好??梢詮囊韵聨讉€方面來做。

      1.可以考慮自己去修改 log4plsql提供的plog包,

      1.1修改數據表tlog,增加一些字段保存其他信息(比如:可以保存客戶端ip)。

      修改存儲過程plog.addrow ,把相關信息保存到測試數據表。

      可以從后臺獲取一些運行環境信息,比如采取下面的類似方式獲取一些信息

      sys_context('userenv','current_user')

      sys_context('userenv', 'ip_address')

      1.2增加其他一些方法

      根據實際需要可以往plog包增加其他一些方法,比如日志的刪除之類的。

      最好還是另外包裝1層,象上面的oracle包pkg_condebug一樣,定義1個包來做一些相關包裝。

      2.修改視圖 vlog,按照具體要求來現顯示一些測試結果信息。

      例如:創建下面的視圖。

      create or replace view vlog2 as
      select
      luser 數據庫用戶,
      plog.getlevelintext(llevel) as 測試信息等級,
      lsection 日志目錄,
      ltexte 錯誤信息,
      ldate 產生錯誤時間
      from tlog a

      3.算法測試的自動化

      可以根據需要,增強上面log4plsql的應用中關于測試數據的生成部分,并且做到據根據業務需要,測試測試數的生成可以帶有隨機性。或者按照關鍵用例為主來生成測試數據。

    國內最大的酷站演示中心!
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 延吉市| 抚顺县| 遵义市| 临沧市| 抚宁县| 资兴市| 芜湖市| 乐东| 永顺县| 松滋市| 临邑县| 温宿县| 彩票| 西乌珠穆沁旗| 寿光市| 岳西县| 五大连池市| 乡城县| 绍兴市| 汪清县| 成都市| 东丰县| 称多县| 营口市| 磴口县| 韶关市| 图木舒克市| 焦作市| 枝江市| 卢氏县| 太仓市| 亳州市| 门源| 井冈山市| 新宾| 莱芜市| 于田县| 萨迦县| 龙泉市| 景洪市| 礼泉县|