mysql心得分享:存儲進程。本站提示廣大學習愛好者:(mysql心得分享:存儲進程)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql心得分享:存儲進程正文
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、語句停止符
或許mysql是將存儲進程、自界說函數看做一條語句的,是以,存儲進程裡多條語句用“;”離隔,為了不抵觸,就要用delimiter 從新界說停止符。
普通可以在存儲進程開端前,界說新的停止符,如
delimiter //
存儲進程書寫終了今後,再恢復界說:delimiter ;
但也能夠在存儲進程開端前,如許寫 delimiter $$,但存儲進程後弗成以再寫其余語句了。如下面的例子
2、變量
mysql的變量,跟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='違背主鍵束縛';