create procedure 存儲過程名 (in | out | INPUT 參數名 參數類型,。。。)
【characteristics 。。。】begin存儲過程體end
存儲過程的參數類型
IN 、OUT、INPUT 都可以在一個存儲過程帶多個
- 沒有參數(無參數無返回)
- 僅僅帶IN 類型(有參數無返回)
- 僅僅帶out 類型(無參數有返回)
- 既帶IN 又帶OUT(有參數有返回)
- 帶INPUT (有參數有返回) 跟SQL server 中 存儲過程中的 output 一樣
存儲過程的參數說明
一、參數前面的符號意思
- IN:當前參數為輸入參數,也就是表示入參;
存儲過程中只是讀取這個參數的值。如果沒有定義參數種類,默認就是 IN,表示輸入參數。 - OUT:當前參數為輸出參數,也就是表示出參;
執行完成后,調用這個存儲過程的客戶端或者應用程序就可以讀取這個參數返回的值了 - INOUT:當前參數既可以為輸入參數,也可以作為輸出參數 同 SQL Server 中 存儲過程的 output
二、存儲過程中 參數的數據類型 可以是mysql 數據庫中的任意類型
三、characteristics 表示創建存儲過程時指定對存儲過程的約束條件,其取值信息如下:
創建 存儲過程
DELIMITER $ -- 自定義 分節符
create procedure pro_emps_select()
beginselect * from emps;
end $delimiter;
存儲過程調用
sql server
exec 存儲過程 參數 --支持參數命名mysql
call 存儲過程(實參列表)
創建存儲過程 不帶參數
delimiter $
create procedure pro_student_select() -- 括號不能省略
beginselect * from student;
end $
delimiter ;call pro_student_select()
創建存儲過程 IN參數
delimiter $
create procedure pro_student_select(IN stu char(8)) -- 括號不能省略
beginselect * from studentwhere stu_num=stu;
end $
delimiter ;set @stu='s002';
call pro_student_select(@stu)
創建存儲過程 out參數
delimiter $
create procedure pro_student_select(out stu_name char(10)) -- 括號不能省略
beginselect student_name into stu_name -- 如果多個 輸出參數, into xxx,xxxx 用逗號隔開就行了from studentwhere stu_num='1002';
end $
delimiter ;call pro_student_select(@stuname)
select @stuname;
創建存儲過程 in、 out參數
delimiter $
create procedure pro_student_select(in stu_id char(6),out stu_name char(10)) -- 括號不能省略
beginselect student_name into stu_name from studentwhere stu_num=stu_id ;
end $
delimiter ;set @stuid=1002;
call pro_student_select(@stuid,@name)
select @name;
創建存儲過程 inout參數
delimiter $
create procedure pro_student_select(inout stu_name char(10)) -- 括號不能省略
beginselect student_class into stu_name from studentwhere stu_name =stu_name ;
end $
delimiter ;set @stu_name =1002;
call pro_student_select(@stu_name )
select @stu_name ;