1. 程式人生 > 其它 >使用儲存過程批量製造資料,模擬大資料量下的ORACL執行情況

使用儲存過程批量製造資料,模擬大資料量下的ORACL執行情況

技術標籤: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,對於返回值來說,函式有返回值,儲存過程沒有返回值,其他的也就沒啥太大的區別了