1. 程式人生 > >Navicat for MySQL 函式 儲存過程 遍歷建立大量複雜結構測試資料

Navicat for MySQL 函式 儲存過程 遍歷建立大量複雜結構測試資料

需求說明:

測試介面時需要造資料,由於資料層次比較複雜導致數量較大,手動新增比較困難,所以就建了一個儲存過程函式,來遍歷插入資料。

工具 Navicat for MySQL

1、這裡使用的Navicat  所以先安裝Navicat 並連線到你想有建立函式的資料庫

2、新建函式

***注意****

由於軟體版本不同 步驟稍有差別,以下第3、4部是我用window時 老版本的navicat需要選擇這兩部,現在用mac版的 版本貌似比較新,直接就進入第5步了。如果你直接進入第5部  直接進行編輯即可,就像寫java、scala等一樣寫一個function就好了,只是語法有所不同而已。

3、選擇過程

4、設定新增引數,如選擇IN指的是呼叫此函式時傳入的引數名以及型別,out為返回值........

5、在以下對應位置修改和填寫自己需要的內容,我們只需要寫方法名,引數列表,函式體 就ok了

填寫完函式內容儲存即可

示例:以下是我建立之後的語句

注:其中 第一句中的DEFINER=`root`@`%`  是建立語句時DEFINER = CURRENT_USER 自動獲取替換登入使用者後生成的,不需要自己修改。

CREATE DEFINER=`root`@`%` PROCEDURE `MakeData_dm_f_activity_analysis_hour`()
BEGIN
	DECLARE dataType int;#宣告變數(有些變數需要新增長度限制才能正常儲存函式)
	DECLARE grading int;
	DECLARE gradTime VARCHAR(11);#宣告變數(有些變數需要新增長度限制才能正常儲存函式)
	DECLARE sumCount int;
	DECLARE inputDate VARCHAR(11);
	set inputDate='2018-05-01';#需要造那天的資料修改此處即可
	set dataType=1;
	set grading=0;
	WHILE grading<24 do   #插入資料的多少
		set sumCount=RAND()*1000;   #隨機函式 RAND()生成的是0~1之間的小數,乘以多少就可以放大多少倍,如起點不是0,則加上起點數 如20~80:RAND()*60+20

	if (grading<10) then  
		 set gradTime = CONCAT('0',grading,':00'); 
	else  
		set gradTime =CONCAT(grading,':00');  
	end if;
		#5個數據型別 和24個小時遍歷生成資料,組合七個固定生命週期插入
		INSERT INTO `bg_webAnalysis`.`dm_f_activity_analysis_hour`(`id`, `tenant_id`, `activity_id`, `type`, `data_type`, `sum_target`, `data_hour`, `created_at`, `updated_at`, `created_by`, `updated_by`, `publish_status`, `input_date`) VALUES (null, 1, 1, 1, dataType, sumCount, gradTime, '2018-05-21 14:51:34', '2018-05-21 14:51:40', 123123, 3213123, 1, inputDate);
	if (dataType<5) then  
		 set dataType= dataType+1;
	elseif (dataType=5) then  
		 set grading=grading+1; 
		 set dataType= 1;
	end if; 
	END WHILE;

END;

此處是造數,所以無需引數和返回值。

注意事項/語法:

1、DECLARE 用來宣告變數。但是有些變數需要新增長度限制才能正常儲存函式。

2、set 用給變數賦值

3、WHILE do END WHILE; 來迴圈

4、條件用if語句

if (dataType<5) then

set dataType= dataType+1;

elseif (dataType=5) then

set grading=grading+1;

set dataType= 1;

end if;

但是此處注意elseif 要連起來寫。

5、CONCAT(str1,str2,str3,......'); 函式用來拼接字串

6、RAND()生成0~1的資料數(與java等類似)可以*1000 再賦給int即可產生,0~1000的隨機整數