使用Oracle存儲過程批量生成測試數據

在作性能測試等場景時須要生成大量的仿真數據,使用存儲過程能夠快速解決此問題。sql

個人數據庫版本爲Oracle11g,PL/SQL版本爲7.0.1.1066,操做系統版本爲Win7旗艦版。數據庫

首先有一個表player_info結構以下:瀏覽器

-- 建立表 PLAYER_INFO
CREATE TABLE PLAYER_INFO
(
    player_id number(12, 0) PRIMARY KEY,
    player_name varchar2(20) NOT NULL,
    oper_mark number(12, 0),
    input_date number(10,0) DEFAULT to_number(to_char(sysdate,'yyyymmdd')),
    input_time number(10,0) DEFAULT to_number(to_char(sysdate,'hh24miss')),
);

-- 建立序列 SEQ_PLAYER_INFO
CREATE SEQUENCE SEQ_PLAYER_INFO
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999999999999999999999
CYCLE 
CACHE 20 ;

這個表一共有5列:player_id(玩家標識)、player_name(玩家名稱)、oper_mark(操做分數)、input_date(插入日期)、input_time(插入時間)。dom

在插入測試數據的時候,數據的來源可能有如下四種:性能

一、使用SEQUENSE或從其餘PROCUDURE或FUNCTION中獲取的值插入(如player_id)測試

二、使用測試人員制定的值插入(如player_name)操作系統

三、使用隨機數生成器生成並插入(如出)調試

四、使用默認值(如input_date和input_time)code

咱們在製造測試數據的時候,應支持對這四類數據的生成。下面的存儲過程gen_player_info_for_test解決了這一問題:input

CREATE OR REPLACE PROCEDURE gen_player_info_for_test(
       p_player_name       VARCHAR2,      -- 玩家名稱
       p_gen_count         NUMBER,        -- 生成條目數
       p_error_no          OUT NUMBER,    -- 錯誤號
       p_error_info        OUT VARCHAR2,  -- 錯誤提示
       p_error_id          OUT NUMBER,    -- 錯誤序號
       p_error_sysinfo     OUT VARCHAR2   -- 系統錯誤信息
       ) AS
  
  p_curr_value NUMBER := 0;
  p_end_value NUMBER := 0;
  
BEGIN
  dbms_output.put_line('----------- PROCUDURE START -----------');
  
  p_curr_value := 0;
  p_end_value := p_gen_count;
  WHILE p_curr_value < p_end_value
  LOOP 
      p_curr_value := p_curr_value + 1;

      INSERT INTO player_info
          (player_id,
           player_name,
           oper_mark)
      VALUES
          (seq_player_info.nextval,
           p_player_name,
           60 + abs(mod(dbms_random.random, 40)));
  
  END LOOP;
  
  dbms_output.put_line('----------- PROCUDURE END -----------');
  p_error_no      := 0;
  p_error_info    := 'EXECUTE SUCCESS';
  p_error_id      := SQLCODE;
  p_error_sysinfo := SQLERRM;
EXCEPTION
  WHEN OTHERS THEN
    p_error_no      := 999;
    p_error_info    := '存儲過程執行錯誤';
    p_error_id      := SQLCODE;
    p_error_sysinfo := SQLERRM;
END gen_player_info_for_test;
/

第一類數據player_id用Sequence的NextVal加入,第二類數據player_name經過參數傳入存儲過程並插入,第三類數據player_name經過dbms_random.random生成並加工後插入,第四類數據input_date和input_time不用處理,直接使用DEFAULT值便可。

使用此存儲過程時,只須要先在命令窗口中執行此存儲過程,執行後就能夠在PL/SQL內瀏覽器中的Procedures目錄下找到這個存儲過程了,用鼠標右鍵單擊新加入的存儲過程(gen_player_info_for_test)並進入「測試」(Test)窗口,設定輸入的變量,點擊「開始調試器(F9)」便可執行此存儲過程。

注意執行完畢後不要忘記按「提交」按鈕。

END

相關文章
相關標籤/搜索