[sql]view plain
copy
use test;
drop
table
if exists t8;
create
table
t8(s1
int,
primary
key(s1));
drop
procedure
if exists handlerdemo;
delimiter $$
create
procedure
handlerdemo()
begin
declare
xx int
default
4;
declare
oh_no condition
forsqlstate
'23000'
; #declare
continue
handler
forsqlstate
'23000'
set@x2=1;
declare
exit handler
foroh_no
set@info=
'違反主鍵約束'
; set
@x=1;
insert
into
t8 values
(1);
set@x=2;
insert
into
t8 values
(1);
set@x=3;
end
呼叫儲存過程
[sql]view plain
copy
/* 呼叫儲存過程*/
call handlerdemo();
/* 檢視呼叫儲存過程結果*/
select
@x,@info;
心得體會:
1、語句結束符
也許mysql是將儲存過程、自定義函式看作一條語句的,因此,儲存過程裡多條語句用「;」隔開,為了避免衝突,就要用delimiter 重新定義結束符。
一般可以在儲存過程開始前,定義新的結束符,如
delimiter //
儲存過程書寫完畢以後,再恢復定義:delimiter ;
2、變數
mysql的變數,跟sql server一樣,形如 @x ,但無需宣告,直接使用。
而在儲存過程裡面,變數無須用 @,但要宣告。並且宣告要放在儲存過程的頭部(?),如本例,否則報錯。真奇怪啊,一方面,有時候變數無須宣告就可以使用,另一方面,有時候又要限定宣告位置,令人無所適從,似乎隨便了點。
儲存過程內部的變數,作用範圍僅限於儲存過程。但那些帶@的變數,卻彷彿可以跨越會話和連線,看上去是全域性變數?如上面的例子。
3、條件和處理
定義條件,是為了給處理呼叫。如上面的例子:
[sql]view plain
copy
declare
oh_no condition
forsqlstate
'23000'
; #declare
continue
handler
forsqlstate
'23000'
set@x2=1;
declare
exit handler
foroh_no
set@info=
'違反主鍵約束'
;
Mysql儲存過程學習筆記
在pl sql中,主要包括declare部分 宣告引數 begin.end部分和例外部分。mysql儲存過程建立的格式 create procedure過程名 過程引數 特性.過程體 選中 函式右鍵 新建建立 完成 輸入函式體 儲存名字 語法 create procedire 儲存過程命名 開始 函...
mysql儲存過程學習筆記
儲存過程理解 1.儲存過程 類似函式或者方法,是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。2.mysql儲存過程的建立 mysql儲存過程建立的格式 create procedure 過程名 過程引數 特...
mysql儲存過程學習筆記
1.儲存過程簡介 我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。乙個儲存過程是乙個可程式設...