使用儲存過程批量製造資料,模擬大資料量下的ORACL執行情況
阿新 • • 發佈:2020-12-12
技術標籤:oracle
概述
在程式場景中,很少有機會去接觸到大資料量的情況,此時可以藉助,儲存過程和儲存函式在資料庫中執行大量的資料,模擬大資料情況,在藉助JMETER和模擬大併發,大資料下的程式效能。
案例
儲存過程需要完成這樣的幾個事,EXPENSES_TYPE要是隨機量1或2,當EXPENSES_TYPE=1時EXPENSES_NAME要是轉賬,當EXPENSES_TYPE=2時EXPENSES_NAME要是紅包,EXPENSES_AMOUNT要是隨機金額,ACCT要是2020年的任意時間
前三個可以通過dbms_random.value或者If…else語句來完成,
CREATE OR REPLACE PROCEDURE CREATE_EXPEND_DATA
IS
ID NUMBER;
RD_TYPE VARCHAR2(200);
RD_NAME VARCHAR2(200);
RD_DATE DATE;
RD_AMOUNT NUMBER;
BEGIN
ID := 10;
FOR i IN 1..100000 LOOP
RD_TYPE := trunc(dbms_random.value(1,3));
IF RD_TYPE='1' THEN
RD_NAME := '轉賬';
ELSE
RD_NAME := '紅包';
END IF;
RD_AMOUNT := trunc( dbms_random.value(0,10000));
RD_DATE := RANDOM_DATE();
INSERT INTO EXPEND VALUES(TO_CHAR(ID),RD_TYPE,RD_NAME,RD_AMOUNT,RD_DATE);
ID := ID + 1;
END LOOP;
END;
而隨機時間段也可以通過,一個時間函式來獲取,如下
CREATE OR REPLACE FUNCTION RANDOM_DATE
RETURN DATE
IS
var DATE;
BEGIN
var :=
to_date(TRUNC(DBMS_RANDOM.VALUE(
to_number( to_char(to_date('20200101','yyyymmdd'),'J')),
to_number(to_char(to_date('20201231','yyyymmdd')+1,'J')))),'J')+
DBMS_RANDOM.VALUE(1,3600)/3600;
RETURN var;
END;
呼叫
BEGIN
CREATE_EXPEND_DATA;
END;
結果:
ok,十萬條資料有了,ORACL執行儲存過程建立資料的時候,還挺快的
知識補充
補充一下ORACLE函式和儲存過程的知識:
看一下,ORACLE函式和儲存過程的結構
--ORACLE函式
CREATE OR REPLACE FUNCTION fnAB(paramA in INTEGER)--函式及引數定義
RETURN INTEGER IS --定義返回值
--定義變數
l_A INTEGER;
BEGIN
l_A := paramA;
RETURN l_A;--返回值
END;
--儲存過程
CREATE OR REPLACE PROCEDURE fnAB(paramA in INTEGER)--函式及引數定義
IS
--定義變數
l_A INTEGER;
BEGIN
l_A := paramA;
END;
可以看到的是,函式和儲存過程在關鍵字及返回值上有所不同,
定義函式的關鍵字為FUNCTION,定義儲存過程的關鍵字為PROCEDURE,對於返回值來說,函式有返回值,儲存過程沒有返回值,其他的也就沒啥太大的區別了