Navicat for MySQL 函式 儲存過程 遍歷建立大量複雜結構測試資料
阿新 • • 發佈:2019-01-30
需求說明:
測試介面時需要造資料,由於資料層次比較複雜導致數量較大,手動新增比較困難,所以就建了一個儲存過程函式,來遍歷插入資料。
工具 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的隨機整數