在mysql5.0 DB 中創(chuàng)建存儲過程與其他DB (oracle,sql server等)有一些語法不同,由于mysql 解析器 一遇到“;”分號時,就開始結(jié)束命令的執(zhí)行。
如創(chuàng)建一個student表
	CREATE TABLE student
	(
	   stu_id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	   stu_name VARCHAR(15) NOT NULL,
	   age VARCHAR(3) NOT NULL
	);
為該表創(chuàng)建一個存儲過程
	CREATE PROCEDURE addStudent()
	BEGIN
	         INSERT INTO student (stu_name, age) VALUES ('22', '2');
	END;
提示以下錯誤:
	MySQL 返回:
	#1064 - You have an error in your SQL syntax;
	check the manual that corresponds to your MySQL server version for the
	right syntax to use near 'insert into student (stu_name,age) values ('22','3')' at line 3
錯誤分析:按mysql的語法,以上分別創(chuàng)建存儲過程和插入數(shù)據(jù)都沒錯,那為什么會報出syntax 錯誤呢?那是因為mysql 解析器的工作原理,當(dāng)你執(zhí)行以上腳本時,mysql 解析器解析到了insert into后遇到“;”分號,故就結(jié)束了本次執(zhí)行,也就是說它還沒執(zhí)行到end,為終止了,所以有報語法錯誤。
解決方法:
使用DELIMITER關(guān)鍵字申明當(dāng)前段分隔符,如下
	DELIMITER // --     表示申明開始
	create procedure addStudent ()
	begin
	insert into student (stu_name,age) values ('28','3');
	end
	//    --申明結(jié)束
調(diào)用存儲過程命令為:
	delimiter ;
	call addStudent()
就這樣可以完美地實現(xiàn)了存儲過程的創(chuàng)建
以下是使用存儲過程為student表插入10000條記錄
	DELIMITER //
	create procedure add4 ()
	begin
	DECLARE num int; --申明變量
	SET num = 0 ;--給變量賦值
	while(num < 100) do
	insert into student (stu_name,age) values ('kevin','23');
	set num = num + 1 ;
	end while ;
	end
	//
新聞熱點
疑難解答
圖片精選