使用变量_存储过程和函数及变量的使用
存儲過程和函數是在數據庫中定義一些SQL語句的集合,然后直接調用這些存儲過程和函數來執行已經定義好的SQL語句。存儲過程和函數可以避免開發人員重復的編寫相同的SQL語句。而且,存儲過程和函數是在mysql服務器中存儲和執行的,可以減少客戶端和服務器端的數據傳輸。
一.創建存儲過程和函數
1. 創建存儲過程
mysql中創建存儲過程的基本形式:
create procedure sp_name([proc_parameter[,…]]) [characteristic…] routine_body;
sp_name:參數是存儲過程的名稱;
proc_parameter:表示存儲過程的參數列表;
characteristic:參數指定存儲過程的特性;
routine_body:參數是SQL代碼的內容,可以用begin…end來標志SQL代碼的開始和結束;
proc_parameter中每個參數由3部分組成。這3部分分別是輸入輸出類型、參數名稱和參數類型。
[in|out|inout] param_name type
in:表示輸入參數
out:表示輸出參數
inout:表示既可以是輸入也可以是輸出
param_name:參數是存儲過程的參數名稱
type:參數指定存儲過程的參數類型,該類型可以是mysql數據庫的任意數據類型。
characteristic參數有多個取值。取值說明:
language SQL:說明routine_body部分是由SQL語言的語句組成,這也是數據庫系統默認的語言。
[not] deterministic:指明存儲過程的執行結果是否是確定的。
deterministic:表示結果是確定的,每次執行存儲過程時,相同的輸入會得到相同的輸出。
not deterministic:表示結果是非確定的,相同的輸入可能得到不同的輸出。默認情況下,結果也是非確定的。
{contains sql|no sql|reads sql data|modifies sql data}:指明子程序使用SQL語句的限制。
contains SQL:表示子程序包含SQL語句,但不包含讀或者寫數據的語句;
no SQL:表示子程序中不包含SQL語句;
reads SQL data:表示子程序中包含讀數據的語句;
modifies sql data:表示子程序中包含寫數據的語句。默認情況下,系統會指定為contains SQL。
SQL security{definer|invoker}:指明誰有權限來執行。
definer:表示只有定義者自己才能執行;
invoker:表示調用者可以執行。默認情況下,系統指定的權限是definer。
comment ‘string’:注釋信息。
注:創建存儲過程時,系統默認指定contains SQL,表示存儲過程中使用SQL語句,最好設置為no SQL。而且,存儲過程中最好在comment部分對存儲過程進行簡單的注釋,以便以后再閱讀存儲過程的代碼是更加方便。
示例:下面創建一個名為num_from_employee的存儲過程。
delimiter &&
create procedure num_from_employee(in emp_id int,out count_num int)
reads sql data
begin
select count(*) into count_num
from employee
where d_id=emp_id;
end &&
注:代碼執行完畢,沒報錯就表示存儲過程創建成功;
說明:mysq中默認的語句結束符為分號(;)。存儲過程中的SQL語句需要分號來結束。為避免沖突,首先用”delimiter &&”將mysql的技術符設置為&&。最后再用”delimiter;”來將結束符恢復成分號。
創建存儲函數
mysql中創建存儲函數的語法:
create function sp_name([func_parameter[,…]])
returns type
[characteristic…] routine_body
sp_name:參數是函數的名稱;
func_parameter:表示存儲函數的參數列表;
returns type:指返回值類型;
characteristic:參數指定存儲函數的特性,該參數的取值與存儲過程中取值是一樣的。
routine_body:參數是SQL代碼的內容,可以用begin…end來標志SQL代碼的開始和結束。
func_parameter:可以由多個參數組成,其中每個參數由參數名稱和參數類型組成,形式:param_name type
其中,param_name 是存儲函數的參數名稱;
type:參數是指定存儲函數的參數類型;
示例:下面創建一個名為name_from_employee的存儲函數
create function name_from_employee(emp_id int)
returns varchar(20)
begin
return (select name from employee where num=emp_id);
end
存儲函數的名稱:name_from_employee;
函數的參數:emp_id;
返回值是varchar類型;
2. 變量的使用
在存儲過程和函數中,可以定義和使用變量。可以使用declare關鍵字定義變量,然后賦值。變量的作用范圍是begin…and程序段中。
(1) 定義變量
使用declare關鍵字定義變量。語法:
declare var_name[,…] type [default value]
declare:聲明變量;
var_name:參數是變量的名稱(可以同時定義多個變量);
type:指定變量的類型;
default value:子句將變量默認值設置為value,未使用default value時,默認值為null;
示例:declare my_sql int default 10;
(2) 為變量賦值
mysql中set關鍵字為變量賦值。語法:
set var_name = expr[,var_name=expr]…
set:為變量賦值;
var_name:參數是變量的名稱;
expr:參數是賦值表達式;
注:一個set語句可以同時為多個變量賦值,各個變量的賦值語句之間用逗號(,)隔開。
示例:為變量my_sql賦值為30;
set my_sql=30;
mysql中還可以用select…into…語句為變量賦值。語法:
select col_name[,…] into var_name[,…] from table_name where condition
col_name:參數表示查詢的字段名稱;
var_char:參數是變量的名稱;
table_name:參數指表的名稱;
condition:參數指查詢條件;
示例:下面從employee表中查詢id為2的記錄。將該記錄的d_id值賦給my_sql變量。
select d_id into my_sql from employee where id=2;
總結
以上是生活随笔為你收集整理的使用变量_存储过程和函数及变量的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电商分类模块写法_模块化写作——网络小说
- 下一篇: 信元模式mpls 避免环路_呼吸机常见通