數據庫--函數和存儲,批量插入數據腳本

自定義函數與存儲過程之間存在幾點區別:
  1. 自定義函數不能擁有輸出參數,這是因爲自定義函數自身就是輸出參數;而存儲過程可以擁有輸出參數。
  2. 自定義函數中必須包含一條 RETURN 語句,而這條特殊的 SQL 語句不允許包含於存儲過程中。
  3. 可以直接對自定義函數進行調用而不需要使用 CALL 語句,而對存儲過程的調用需要使用 CALL 語句。
建立表1

CREATE TABLE dept(
Id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
Deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
Dname VARCHAR(20) NOT NULL DEFAULT “”,
Loc VARCHAR(13) NOT NULL DEFAULT “”
);

建立表2

CREATE TABLE emp(
Id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
Empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
Ename VARCHAR(20) NOT NULL DEFAULT “”,
Job VARCHAR(9) NOT NULL DEFAULT “”,
Mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
Hiredate DATE NOT NULL,
Sal DECIMAL(7,2) NOT NULL,
Comm DECIMAL(7,2) NOT NULL,
Deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0
);
在這裏插入圖片描述
在這裏插入圖片描述

首先得我們的function設置一個參數
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

在這裏插入圖片描述

要把這個打開纔行:

SET GLOBAL log_bin_trust_function_creators=1;

在這裏插入圖片描述

創建一個函數,產生隨機字符串:
DELIMITER $$
CREATE FUNCTION rand_string(n INT)
RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
DECLARE return_str VARCHAR(255) DEFAULT "";
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
SET i = i + 1;
END WHILE;
RETURN return_str;
END
$$
DELIMITER ;
創建另一個函數用於產生部門編號:
DELIMITER $$
CREATE FUNCTION rand_num() RETURNS INT(5)
BEGIN
DECLARE I INT DEFAULT 0;
SET I = FLOOR(100+RAND()*10);
Return I;
END $$
DELIMITER ;

如何刪除FUNCTION,這個方式和刪除表格一樣的手法。
DROP FUNCTION 函數名;

在這裏插入圖片描述
建設成功

創建一個存儲,往emp表中插入數據:
DELIMITER $$
CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE I INT DEFAULT 0;
SET autocommit = 0;
REPEAT
SET I = I + 1;
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES ((START+i), rand_string(6), 'SALESMAN',0001,CURDATE(),2000,400,rand_num());
UNTIL I =max_num
END REPEAT;
COMMIT;
END $$
DELIMITER ;
創建一個存儲,往dept表中插入數據:
DELIMITER $$
CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE I INT DEFAULT 0;
SET autocommit = 0;
REPEAT
SET I = I + 1;
INSERT INTO dept (deptno,dname,loc)VALUES((START+i),rand_string(10),rand_string(8));
UNTIL I =max_num
END REPEAT;
COMMIT;
END $$
DELIMITER ;

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章