首頁  >  文章  >  資料庫  >  mysql學習筆記:預存程序

mysql學習筆記:預存程序

黄舟
黄舟原創
2017-02-15 10:57:54937瀏覽

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 for sqlstate '23000';
#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;
declare exit handler for oh_no set @info='违反主键约束';
SET @X=1;
INSERT INTO t8 VALUES(1);
SET @X=2;
INSERT INTO t8 VALUES(1);
SET @X=3;
END


呼叫預存程序


/* 调用存储过程*/
CALL handlerdemo();

/* 查看调用存储过程结果*/
SELECT @X,@info;


心得體會:


1、語句結束符號裡多條語句用「;」隔開,為了避免衝突,就要用delimiter 重新定義結束符號。

一般可以在預存程序開始前,定義新的結束符,如 

delimiter //

預存程序書寫完畢以後,再恢復定義:delimiter ;

的變數,跟SQL SERVER一樣,形狀如@X ,但無需聲明,直接使用。

而在儲存過程裡面,變數無須用 @,但要宣告。並且聲明要放在儲存程序的頭部(?),如本例,否則報錯。真奇怪啊,一方面,有時候變數無須聲明就可以使用,另一方面,有時候又要限定聲明位置,令人無所適從,似乎隨便了點。

預存程序內部的變量,作用範圍僅限於預存程序。但那些帶@的變量,卻彷彿可以跨越會話和連接,看上去是全局變量?如上面的例子。

3、條件和處理

定義條件,是為了給處理呼叫。如同上面的例子:

DECLARE oh_no condition for sqlstate '23000';
#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;
declare exit handler for oh_no set @info='违反主键约束';

以上就是以上就是的內容,更多相關內容請關注PHP中文網(www.php.cn)!的內容,更多相關內容請關注PHP中文網(www.php.cn)!



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn