# 儲存過程和函式
/*儲存過程和函式
好處:1.提高**的重用性
2.簡化操作
*/# 儲存過程
/*含義:一組預先編譯好的sql語句的集合,理解成批處理語句
1.提高**的重用性
2.簡化操作
3.減少了編譯次數並且減少了和資料庫伺服器的連線次數,提高了效率
*//*
# 一、建立語法
create procedure 儲存過程名(引數列表)
begin
儲存過程體(一組合法的sql語句)
end注意:
1.引數列表包含三部分
引數模式 引數名 引數型別
舉例:in stuname varchar(20)
引數模式:
in:該引數可以作為輸入,也就是改引數需要呼叫方傳入值
out:該引數可以作為輸出,也就是改引數可以作為返回值
inout:該引數既可以作為輸入又可以作為輸出,也就是該引數既需要傳入值,也可以返回值
2.如果儲存過程體僅僅只有一句話,begin end可以省略
儲存過程體中的每條sql語句的結尾要求必須加分號,
儲存過程的結尾可以使用delimiter重新設定
語法:delimiter 結束標記
# 案例
delimiter $
# 二、呼叫語法
call 儲存過程名(實參列表);
*/# 1.空參列表
# 案例:插入到admin表中五條記錄
select
*from admin;
delimiter $
create
procedure myp1(
)begin
insert
into admin(username,password)
values
('join1'
,'0000'),
('join2'
,'0000'),
('tom'
,'0000'),
('rose'
,'0000'),
('jack'
,'0000');
end $
# 呼叫
call myp1(
)# sqlyog中執行不要加$ ,dos中執行必須要有$
# 2.創意帶in模式引數的儲存過程
# 案例1:建立儲存過程實現 根據女神名,查詢對應的男神資訊
delimiter $
create
procedure myp2(
in beautyname varchar(20
))begin
select bo.
*from boys as bo
right
join beauty as b
on bo.id=b.boyfriend_id
where b.name=beautyname;
end $
# 呼叫
call myp2(
'金星');
# 案例2:創造儲存過程實現使用者是否登入成功
delimiter $
create
procedure myp3(
in username varchar(20
),in password varchar(20
))begin
declare result int
default0;
select
count(*
)into result
from admin
where admin.username =username
and admin.
`password`
=password;
select
if(result>0,
'成功'
,'失敗');
end $
# 呼叫
call myp3(
'張飛'
,'8888');
# 3.建立帶out模式的儲存過程
# 案例1:根據女神名,返回對應的男神名
delimiter $
create
procedure myp4(
in beautyname varchar(20
),out boyname varchar(20
))begin
select bo.boyname into boyname
from boys as bo
inner
join beauty as b
on bo.id=b.boyfriend_id
where b.name=beautyname;
end $
# 呼叫
set@bnmae
='null'
;call myp4(
'金星'
,@bname);
select
@bname
;# 案例2:根據女神名,返回對應的男神魅力值
delimiter $
create
procedure myp5(
in beautyname varchar(20
),out boyname varchar(20
),out usercp int
)begin
select bo.boyname ,bo.usercp into boyname, usercp
from boys as bo
inner
join beauty as b
on bo.id=b.boyfriend_id
where b.name=beautyname;
end $
# 呼叫
call myp5(
'金星'
,@bname
,@bcp);
select
@bname
,@bcp
;# 4.建立帶inout模式引數的儲存過程
# 案例1:傳入a和b兩個值,最終a和b都翻倍並返回
delimiter $
create
procedure myp6(
inout a int
,inout b int
)begin
set a=a*2;
set b=b*2;
end $
# 呼叫
set@m=10
;set@n=
20;call myp6(@m,
@n);select@m,
@n;# 二、刪除儲存過程
/*語法:
drop procedure 儲存過程名;
注意:一次只能刪除乙個
*/drop
procedure myp1;
# 三、檢視儲存過程的資訊
show
create
procedure myp2;
mysql 過程和函式 MySQL 儲存過程和函式
變數 系統變數 變數由系統提供,不是使用者自定義的,屬於伺服器層面 全域性變數 會話變數 如果是全域性級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則預設是會話 檢視全域性變數 show global variables show global variablesli...
MySQL儲存過程和儲存函式
儲存過程和儲存函式 mysql的儲存過程 stored procedure 和函式 stored function 統稱為stored routines。1.儲存過程和函式的區別 函式只能通過return語句返回單個值或者表物件。而儲存過程不允許執行return,但是通過out引數返回多個值。函式是...
Mysql 儲存過程和函式
一 儲存過程 procedure 本質上沒區別,執行的本質都一樣。只是函式有如 只能返回乙個變數的限制。而儲存過程可以返回多個。函式是可以嵌入在sql中使用的,可以在select中呼叫,而儲存過程要讓sql的query 可以執行,需要把 mysql real connect 的最後乙個引數設定為cl...