儲存過程示例
儲存過程實戰
儲存過程(stored procedure)是為了完成特定功能的sql語句集。經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。類似於程式語言中的方法或函式。
1.儲存過程是對sql語句的封裝,增強可復用性
2.儲存過程可以隱藏複雜的業務/商業邏輯
3.儲存過程支援接收引數,並返回運算結果
1.可移植性差(如果更換資料庫,要重寫儲存過程)
2.難以除錯和擴充套件
3.無法使用explain對儲存過程進行分析
4.某些網際網路公司開發手冊中禁止使用儲存過程
--「求兩數之和」儲存過程定義
delimiter
// --宣告語句結束符,將語句結束符設為//,當遇到//時,說明語句執行結束,避免與儲存過程裡的;混淆。(不然會報錯)
create
procedure my_sum(
in a int
,in b int
,out result int
)--定義儲存過程my_sum; 定義(in)入參a,b; 定義(out)出參result
begin
--儲存過程開始
set result= a + b;
--用set給變數賦值
end--儲存過程結束
// --語句執行結束
delimiter
;--再將語句結束符改回;
--儲存過程呼叫
call my_sum(10,
20,@result);
--呼叫儲存過程
select
@result
;--select語句取結果 result=30
--儲存過程定義:計算1+2+...+n
delimiter
//create
procedure my_n_sum(
in n int
,out result int
)--儲存過程定義
begin
declare i int
default1;
--宣告i=1
declare sum int
default0;
--宣告sum=0
while i <= n do
--計算1+2+...+n
set sum = sum + i;
set i = i +1;
endwhile
set result = sum;
--將結果傳給result
end;
//delimiter
;
--儲存過程定義
call my_n_sum(
100,
@result);
select
@result
;--result=5050
此案例中用到兩張表:使用者表(uesr_info)和郵件表(email_info)
drop
table
ifexists user_info;
--表存在時刪除
drop
table
ifexists email_info;
create
table user_info(
--建立使用者表
id int
notnull
auto_increment
primary
key,
--定義id為int型、不為空、自增長、主鍵
name varchar(30
),--name是變長字元,最長為30個位元組
emailvarchar(50)
);/*插入兩條記錄*/
insert
into user_info(id, name, email)
values(1
,'小紅'
,'[email protected]');
insert
into user_info(id, name, email)
values(2
,'小明'
,'[email protected]');
create
table email_info(
--建立郵件表
id int
notnull
auto_increment
primary
key,
email varchar(50
),content text
,--檔案內容
send_time datetime
--郵件傳送時間
);
此時user_info表為:
idname
email1小紅
email_info表為空。
我們需要根據傳入的使用者id和內容傳送郵件。
#處理過程
--1.根據傳入的id查詢使用者郵箱
select email from user_info where id=1;
--假設傳入id為1
--2.根據查到的email修改email_info表,以傳送內容
insert
into email_info(email, content, send_time)
values
,'歡迎你!'
,now()
);
此時email_info表為:
idemail
content
send_time
歡迎你!
2021-01-08 23:19:02
下面用儲存過程來實現郵件的傳送(即上面處理過程的兩步):
--「根據使用者id和郵件內容content給使用者發郵件」的儲存過程實現
delimiter
//create
procedure send_email(
in user_id int
,in content text
)begin
/*根據使用者id查詢郵箱email*/
set@user_email=(
select email from user_info where id = user_id)
;/*模擬傳送郵件*/
insert
into email_info(email, content, send_time)
values
(@user_email
, content, mow())
;end;//
delimiter
;--儲存過程呼叫
call send_email(1,
'歡迎你!'
);
SQL 儲存過程的使用
1.在mssql建立儲存過程,在db 儲存過程 新建儲存過程 右鍵 create procedure user logon check username varchar 45 userpsw varchar 45 asselect from users where username username...
SQL 儲存過程的使用
儲存過程類似乙個函式,可以執行一條或者多條sql語句,可帶引數,可返回值 為了簡化操作,方便更改和擴充套件,將乙個事件的處理封裝在乙個單元中供使用。建立儲存過程 不帶引數的 create proc sp sample asselect from sample 建立儲存過程 帶引數的 create p...
sql儲存過程的簡單使用
儲存過程 stored procedure 是資料庫系統中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。建立儲存過程的基本 結構 create procedure procedure name procedu...