sql-2-存儲過程

存儲過程:

      就是一組sql語句集,用於實現較複雜的邏輯功能,可以理解爲Java 語句中的方法,可以接受參數,返回結果集,模塊化,封裝,代碼複用。可以有f/else, case,while等控制語句

      存儲過程會先進行編譯然後存放在數據庫中,後面執行的時候可以直接調用,所以存儲過程腰比執行單個的sql語句高效(執行速度快),但也有一些缺點,如:各個數據庫的語法不同,不同的數據庫,實現相同的存儲過程,會有不同的語法去寫。

簡單的例子:

幾點說明,在寫存儲過程的時候,實用 DELIMITER 去定義輸入的結束符號,默認的是 ; DELIMITER // 那麼就可以定義結束符號是 //。DEFINER:定義創建者

 

DROP PROCEDURE IF EXISTS proc_adder;
DELIMITER //
CREATE PROCEDURE proc_adder(IN a int, IN b int, OUT sum int)
BEGIN
	DECLARE c int;              變量定義
	if a is null 
		then set a=0;
	end if;
	if b is null
		then set b=0;
	end if;
	set sum = a + b;
	
END
//
DELIMITER ; 

set @b=5;                         變量賦值
call proc_adder(2,3, @b);
select @b as sum;

控制語句:

IF

DROP PROCEDURE IF EXISTS proc_if;
DELIMITER //
CREATE PROCEDURE proc_if(IN type int)
BEGIN
	DECLARE c varchar(500);
	IF TYPE = 0 THEN
		set  c = 'param is 0';
	ELSEIF type=1 THEN
		set c = 'param is 1';
	ELSE
		set c = "param is others";
	END IF;
	select c;
END 
// 
DELIMITER ; 

call proc_if(4);

CASE

DROP PROCEDURE IF EXISTS proc_case;
DELIMITER //
CREATE PROCEDURE proc_case(IN type int)
BEGIN
	DECLARE c varchar(500);
	CASE TYPE
	WHEN 0 THEN
		set c = "param 0";
	WHEN 1 THEN
		set c = "param 1";
	ELSE
		set c = "param other";
	END CASE;
	select c;
END 
// 
DELIMITER ;

call proc_case(0);

WHILE

DROP PROCEDURE IF EXISTS proc_while;
DELIMITER //
CREATE PROCEDURE proc_while(IN num int)
BEGIN
	DECLARE i int;
	DECLARE j int;
	set i = 0;
	set j = 0;
	WHILE i<= num DO
		set j = j + i;
		set i = i + 1;
	END WHILE;
	select j;
END
// 
DELIMITER ;

call proc_while(10);

 

 

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