標籤:
基本文法就自己百度吧,雖然我百度了,但是我基本沒看明白,還是多敲代碼的好啊
1、delimiter
更改命令結束符(因為在procedure中經常要用到預設的命令結束符--分號(;)
所以在建立procedure的時候需要定義新的結束符以說明建立procedure的命令結束)這裡將結束符號改成貨幣符號($)
變數:
變數的作用範圍同編程裡面類似,在這裡一般是在對應的begin和end之間。在end之後這個變數就沒有作用了,不能使用了。這個同編程一樣。
另外有種變數叫做會話變數(session variable),也叫做使用者定義的變數(user defined variable)。這種變數要在變數名稱前面加上“@”符號,叫做會話變數,代表整個會話過程他都是有作用的,這個有點類似於全域變數一樣。這種變數用 途比較廣,因為只要在一 個會話內(就是某個應用的一個串連過程中),這個變數可以在被調用的預存程序或者代碼之間共用資料。
局部變數
DECLARE var_name[,...] type [DEFAULT value]
如 declear a int(2) default 2;
注意該語句使用的地方(不能在外部程式中使用)
指派陳述式set
SET var_name = expr [, var_name = expr] ...
如set a=5;set a=a+4;
賦值的所有操作都要使用set語句,直接使用a=5的操作是非法的
注意該語句使用的地方(不能在外部程式中使用)
@操作符
@a用於定義一個全域變數,該變數的生命週期只在本次串連。
set @a=3;指派陳述式
set @a=b語句可存在於任何語句塊中
2、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資料庫的任意資料類型。
列:
delimiter $
create procedure mytest(out pamar int)
begin
select count(*) into param from user;
end$
調用:
demiliter ; (命令結束符更改回來)
call mytest(@num); (會話變數,參考前面)
select @num (讀取變數值)
drop procedure mytest; //刪除預存程序
/************************************/
create procedure mytest(inout sexflag int)
begin
select * from user where sex=sexflag
end$
set @sexflag=xx
call mytest(@sexflag);
/****************************************/
create procedure test()
begin
declare i int //定義變數
set i=0; //設定變數值
while i<10 do
insert into user(username,password) values(i,‘pwd‘);
或者
insert into user(username,password) values(concat(‘user‘,i),"pwd");
set i=i+1;
end while;
end$
delimiter ;
call test();
/****************/
delimiter $
create procedure test1(in param int)
begin
(也可以定義變數
declare i int;
set i=param+1;
)
if param=1 then
insert into user(username,password) values(‘eeee‘,‘11111‘);
else
insert into user2(usename,password) values(‘ttt‘,‘222222222222‘);
enf if;
end$
delimiter ;
call test1(1); 或者 call test1(2);
/********************************/
delimiter $
create procedure mytest(in param int)
begin
set @num=1;
while @num<20 do
if param=1 then
insert into user(username,password) values(concat(‘user‘,@num),‘pwd‘);
else
insert into user2(username,password) values(concat(‘user‘,@num),‘pwd‘);
end if;
set @[email protected]+1;
end while;
end$
delimiter ;
call mytest(1) 或者 call mytest(2)
mysql 預存程序學習