Mysql儲存過程名規則 MySQL儲存過程(一)

2021-10-25 14:57:40 字數 3600 閱讀 1611

1.1create  procedure(建立)

createprocedure儲存過程名 (引數列表)beginsql語句**塊end

注意:在mysql客戶端定義儲存過程的時候使用delimiter命令來把語句定界符從;變為//。

當使用delimiter命令時,你應該避免使用反斜槓(『"』)字元,因為那是mysql的轉義字元。

如:mysql> delimiter //mysql> create procedure ******proc (out param1 int)-> begin

-> select count(*) into param1 fromt;-> end

1.2alter  procedure(修改)

alter procedure 儲存過程名sql語句**塊

這個語句可以被用來改變乙個儲存程式的特徵。1.3drop procedure(刪除)

drop procedure ifexists儲存過程名

eg:drop procedure if existsproc_employee (proc_employee 儲存過程名)

這個語句被用來移除乙個儲存程式。不能在乙個儲存過程中刪除另乙個儲存過程,只能呼叫另乙個儲存過程1.4show  create procedure 儲存過程名(類似於show create table,檢視乙個已存在的儲存過程)

show create procedure 儲存過程名

1.5show  procedure  status(列出所有的儲存過程)

show procedure status

1.6call語句(儲存過程的呼叫)

call 儲存過程名(引數列表)

call語句呼叫乙個先前用create procedure建立的程式。

call語句可以用宣告為out或的inout引數的引數給它的呼叫者傳回值。

儲存過程名稱後面必須加括號,哪怕該儲存過程沒有引數傳遞

1.7begin ... end(復合語句)

[begin_label:]

begin

[statement_list]

end[end_label]

儲存子程式可以使用begin ... end復合語句來包含多個語句。

statement_list 代表乙個或多個語句的列表。statement_list之內每個語句都必須用分號(;)來結尾。

復合語句可以被標記。除非begin_label存在,否則end_label不能被給出,並且如果二者都存在,他們必須是同樣的。

1.8 declare語句(用來宣告區域性變數)

declare語句被用來把不同專案局域到乙個子程式:區域性變數

declare僅被用在begin ... end復合語句裡,並且必須在復合語句的開頭,在任何其它語句之前。

1.9儲存程式中的變數

1.1   declare區域性變數

declare var_name[,...] type [default value]這個語句被用來宣告區域性變數。

要給變數提供乙個預設值,請包含乙個default子句。

值可以被指定為乙個表示式,不需要為乙個常數。

如果沒有default子句,初始值為null。

區域性變數的作用範圍在它被宣告的begin ... end塊內。

它可以被用在巢狀的塊中,除了那些用相同名字宣告變數的塊。

1.2變數set語句

set var_name = expr [, var_name = expr]在儲存程式中的set語句是一般set語句的擴充套件版本。

被參考變數可能是子程式內宣告的變數,或者是全域性伺服器變數。

在儲存程式中的set語句作為預先存在的set語法的一部分來實現。這允許set a=x, b=y, ...這樣的擴充套件語法。

其中不同的變數型別(局域宣告變數及全域性和集體變數)可以被混合起來。

這也允許把區域性變數和一些只對系統變數有意義的選項合併起來。

1.3select ... into語句

select col_name[,...] into var_name[,...]table_expr

這個select語法把選定的列直接儲存到變數。

因此,只有單一的行可以被取回。select id,data into x,y from test.t1 limit 1;

注意,使用者變數名在mysql5.1中是對大小寫不敏感的。

重要: sql變數名不能和列名一樣。如果select ... into這樣的sql語句包含乙個對列的參考,幷包含乙個與列相同名字的區域性變數,mysql當前把參考解釋為乙個變數的名字。

1.10 mysql 儲存過程引數型別(in、out、inout)

此小節內容來自:

mysql儲存過程引數(in)

mysql 儲存過程 「in」 引數:跟 c 語言的函式引數的值傳遞類似,mysql 儲存過程內部可能會修改此引數,但對in型別引數的修改,

對呼叫者(caller)來說是不可見的(not visible)。

mysql儲存過程引數(out)

mysql 儲存過程 「out」 引數:從儲存過程內部傳值給呼叫者。在儲存過程內部,該引數初始值為null,無論呼叫者是否給儲存過程引數設定值

mysql儲存過程引數(inout)

mysql 儲存過程 inout 引數跟 out 類似,都可以從儲存過程內部傳值給呼叫者。不同的是:呼叫者還可以通過 inout 引數傳遞值給儲存過程。

總結如果僅僅想把資料傳給 mysql 儲存過程,那就使用「in」 型別引數;

如果僅僅從 mysql 儲存過程返回值,那就使用「out」 型別引數;

如果需要把資料傳給 mysql 儲存過程,還要經過一些計算後再傳回給我們,此時,要使用「inout」 型別引數。

1.11 例子:

1.1建立儲存過程

帶(輸出引數)返回值的儲存過程:

--刪除儲存過程

drop procedure if existsproc_employee_getcount--建立儲存過程

create procedure proc_employee_getcount(out n int)begin

select count(*) fromemployee ;end

--mysql呼叫儲存過程

call proc_employee_getcount(@n);

帶輸入引數的儲存過程:

--刪除儲存過程

drop procedure if existsproc_employee_findbyid;--建立儲存過程

create procedure proc_employee_findbyid(in n int)begin

select * from employee where id=n;end

--定義變數

set @n=1;--呼叫儲存過程call proc_employee_findbyid(@n);

操作儲存過程時應注意:

1. 刪除儲存過程時只需要指定儲存過程名即可,不帶括號;

2. 建立儲存過程時,不管該儲存過程有無引數,都需要帶括號;

3.在使用set定義變數時應遵循set的語法規則;

set @變數名=初始值;

4.在定義儲存過程引數列表時,應注意引數名與資料庫中欄位名區別開來,否則將出現無法預期的結果

mysql 儲存過程 動態表名

想寫乙個儲存過程,實現不同的庫下不同表的查詢功能,發現表名傳遞跟其他變數不一樣 delimiter create procedure proc begin set v databasename unibiz0122013 set v tablename mail open 05 set v sql ...

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...