儲存過程可以看成是對一系列 sql 操作的批處理。
使用儲存過程的好處:
命令列中建立儲存過程需要自定義分隔符,因為命令列是以 ; 為結束符,而儲存過程中也包含了分號,因此會錯誤把這部分分號當成是結束符,造成語法錯誤。
包含 in、out 和 inout 三種引數。
給變數賦值都需要用 select into 語句。
每次只能給乙個變數賦值,不支援集合的操作。
delimiter //
create procedure myprocedure( out ret int )
begin
declare y int;
select sum(col1)
from mytable
into y;
select y*y into ret;
end //
delimiter ;
call myprocedure(@ret);
select @ret;
在儲存過程中使用游標可以對乙個結果集進行移動遍歷。
游標主要用於互動式應用,其中使用者需要對資料集中的任意行進行瀏覽和修改。
使用游標的四個步驟:
宣告游標,這個過程沒有實際檢索出資料;
開啟游標;
取出資料;
關閉游標;
delimiter //
create procedure myprocedure(out ret int)
begin
declare done boolean default 0;
declare mycursor cursor for
select col1 from mytable;
# 定義了乙個 continue handler,當 sqlstate '02000' 這個條件出現時,會執行 set done = 1
declare continue handler for sqlstate '02000' set done = 1;
open mycursor;
repeat
fetch mycursor into ret;
select ret;
until done end repeat;
close mycursor;
end //
delimiter ;
觸發器會在某個表執行以下語句時而自動執行:delete、insert、update。
觸發器必須指定在語句執行之前還是之後自動執行,之前執行使用 before 關鍵字,之後執行使用 after 關鍵字。before 用於資料驗證和淨化,after 用於審計跟蹤,將修改記錄到另外一張表中。
insert 觸發器包含乙個名為 new 的虛擬表。
create trigger mytrigger after insert on mytable
for each row select new.col into @result;
select @result; -- 獲取結果
delete 觸發器包含乙個名為 old 的虛擬表,並且是唯讀的。
update 觸發器包含乙個名為 new 和乙個名為 old 的虛擬表,其中 new 是可以被修改的,而 old 是唯讀的。
mysql 不允許在觸發器中使用 call 語句,也就是不能呼叫儲存過程。
SQL儲存過程
什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要新增...
sql儲存過程
概念 sql server提供了一種方法,它可以將一些固定的操作集中起來由sql server資料庫伺服器來完成,以實現某個任務,這種方法就是儲存過程。儲存過程是sql語句和可選控制流語句的預編譯集合,儲存過程在資料庫中可由應用程式通過乙個呼叫執行,而且允許使用者申明變數 有條件的執行以及其它強大的...
SQL儲存過程
儲存過程 1.返回值 create proc example4 as begin declare 返回值 int select 返回值 sum 庫存量 from 產品 return 返回值 endgo 接受這個返回值必須要用變數來接收,如 declare 接收值 int exec 接收值 examp...