Mysql 存儲過程 + python調用存儲過程 (內置函數講解及定義摘抄)

 

定義

存儲過程:就是爲之後的使用而保存的一條或多條 MySQL語句的集合。可將其視爲批文件,雖然它們的做用不只限於批處理。mysql

 我的使用存儲過程的緣由就是由於 存儲過程比使用單獨的SQL語句要快sql

有以下表(名爲 a)

其下,全部均可以用一條sql解決,可是我爲了熟悉 存儲過程,而採用函數式來進行書寫數據庫

 

簡單案例 1 : 建立函數 name函數

     , 須要傳入 id值,返回 name值:spa

# 建立一個名爲 name的存儲過程


DELIMITER // create procedure name ( in _id int ) BEGIN select name from a where id=_id; END // DELIMITER;

其中, DELIMITER //告訴命令行實用程序使用 //做爲新的語句結束分隔符,
  能夠看到標誌存儲過程結束的 END定義爲END//而不是END; 。
這樣,存儲過程體內的 ;仍然保持不動,而且正確地傳遞給數據庫引擎。
最後,爲恢復爲原來的語句分隔符,可以使用 DELIMITER ;。
除\符號外,任何字符均可以用做語句分隔符。若是你使用的是 mysql命令行實用程序,在閱讀本章時請記住這裏的內容。

在運行此存儲函數以後,獲得 以下圖命令行

 

 簡單案例2  建立函數 name_13d

  要求傳入id值,返回id對應的name字段,保存到變量 @temp中傳入的變量須要加@符號,不然會報錯code

  [Procedure execution failed 1414 - OUT or INOUT argument 2 for routine test.name_1 is not a variable or NEW pseudo-variable in BEFORE trigger]blog

DELIMITER //
create procedure name_1 (
in _id int,
out name_ varchar(255)
)

BEGIN
    select name into name_ from a 
    where id=_id;
END //
DELIMITER;

須要注意的是,在運行的時候,須要傳入id值,和變量名,以下圖(使用navicat),得出結果爲小剛io

 

 

簡單案例3  建立函數 name_2

  須要傳入id值,對id值+1以後,返回name值

DELIMITER //
create procedure name_2 (
in _id int,
out name_ varchar(255)
)

BEGIN
    DECLARE id_add int; ##聲明變量 id_add
    select id into id_add from a 
    where id=(_id+1);
    select name into name_ from a where id=id_add;
END //
DELIMITER;講解: 拿到 +1以後的id 放入id_add
相關文章
相關標籤/搜索